给定一组可以按任何顺序排列的空格分隔单词,如何才能匹配给定单词集中的单词。比如说我有:
apple monkey banana dog
我要匹配apple
和banana
我该怎么做?
这是我尝试过的:
m = re.search("(?P<fruit>[apple|banana]*)", "apple monkey banana dog")
m.groupdict() --> {'fruit':'apple'}
但我想要匹配苹果和香蕉。
答案 0 :(得分:1)
在(?P<fruit>[apple|banana]*)
[apple | banana] *定义了一个字符类,例如此标记匹配一个,一个p,一个l,一个e,一个|,一个b或一个n,然后说“匹配此0次或更多次”。 (你可能意味着使用+,无论如何,这意味着'匹配一次或多次')
你想要的是(apple | banana),它将匹配字符串apple或string banana。
了解详情:http://www.regular-expressions.info/reference.html
对于您的下一个问题,要获取所有匹配的正则表达式对字符串,而不仅仅是第一个,请使用http://docs.python.org/2/library/re.html#re.findall
答案 1 :(得分:0)
如果你希望它能够重复,那么你将在白色空间上失败。试试这个:
input = ['apple','banana','orange']
reg_string = '(' + ('|').join(input) + ')'
lookahead_string = '(\s(?=' + ('|').join(input) + '))?' + reg_string + '?'
out_reg_string = reg_string + (len(input)-1)*lookahead_string
matches = re.findall(out_reg_string, string_to_match)
其中string_to_match
是您正在寻找的模式。 out_reg_string
可用于匹配以下内容:
或输入列表中的任何笛卡尔积。