使用Regex-Python在字符串中提取字符串

2024-07-05 14:29:25 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这根绳子

““输入:我们可以吗在拉各斯订酒店?解析:预定VB ROOT+--Can MD aux+--we PRP nsubj+--hotel NN dobj |+--an DT det |+--in prep |+--Lagos NNP pobj+--。“点刺”

我想得到一份这样的名单

['book VB ROOT', 'Can MD aux',..., '? . punct']

使用正则表达式。你知道吗

我试过了

result = re.findall('\||\+-- (.*?)\+--|\| ', result, re.DOTALL)

任何帮助都将不胜感激


Tags: rerootnnresult酒店hotelcanmd
3条回答

这是一个使用正则表达式的版本,但不需要在所有部分上循环两次:

def extract(line):
    _, _, parts = line.strip().partition(' Parse: ')
   return re.split('(?: \|)? \+  ', parts)

line = "Input:Can we book an hotel in Lagos ? Parse: book VB ROOT +  Can MD aux +  we PRP nsubj +  hotel NN dobj | +  an DT det | +  in IN prep | +  Lagos NNP pobj +  ? . punct "
print(extract(line))
>>> ['book VB ROOT', 'Can MD aux', 'we PRP nsubj', 'hotel NN dobj', 'an DT det', 'in IN prep', 'Lagos NNP pobj', '? . punct']

我会用re.split。。你知道吗

>>> s = 'Can we book an hotel in Lagos ? Parse: book VB ROOT  +  Can MD aux  +  we PRP nsubj  +  hotel NN dobj  |   +  an DT det  |   +  in IN prep  |       +  Lagos NNP pobj  +  ? . punct'
>>> re.split(r'\s*\|?\s*\+\s* \s*', s.split('Parse:')[1].strip())
['book VB ROOT', 'Can MD aux', 'we PRP nsubj', 'hotel NN dobj', 'an DT det', 'in IN prep', 'Lagos NNP pobj', '? . punct']

通过使用内置函数和方法而不使用regex:

>>> filter(bool, map(str.strip, s.replace('+ ', '|').split('Parse:')[1].split('|')))
['book VB ROOT', 'Can MD aux', 'we PRP nsubj', 'hotel NN dobj', 'an DT det', 'in IN prep', 'Lagos NNP pobj', '? . punct']

相关问题 更多 >