给定一组可能以任何顺序出现的以空格分隔的单词,我如何仅匹配给定单词集中的那些单词。例如说我有:
apple monkey banana dog
我想匹配apple
,banana
我该怎么做?
这是我尝试过的:
m = re.search("(?P<fruit>[apple|banana]*)", "apple monkey banana dog")
m.groupdict() --> {'fruit':'apple'}
但我想同时匹配苹果和香蕉。
在(?P<fruit>[apple|banana]*)
[apple|banana]* 定义了一个字符类,例如这个标记匹配一个a、一个p、一个l、一个e、一个|、一个b 或一个n,然后说'匹配这个0 次或更多次'。(无论如何,您可能打算使用 +,这意味着“匹配一次或多次”)
你想要的是 (apple|banana) 它将匹配字符串苹果或字符串香蕉。
了解更多:http ://www.regular-expressions.info/reference.html
对于您的下一个问题,要获得正则表达式对字符串的所有匹配,而不仅仅是第一个,请使用http://docs.python.org/2/library/re.html#re.findall
如果您希望它能够重复,那么您将在空白处失败。尝试这个:
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
可用于匹配以下内容:
或您输入列表的任何笛卡尔积。