0

给定一组可能以任何顺序出现的以空格分隔的单词,我如何仅匹配给定单词集中的那些单词。例如说我有:

apple monkey banana dog我想匹配applebanana我该怎么做?

这是我尝试过的:

m = re.search("(?P<fruit>[apple|banana]*)", "apple monkey banana dog")
m.groupdict() --> {'fruit':'apple'} 

但我想同时匹配苹果和香蕉。

4

2 回答 2

1

(?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

于 2013-05-02T02:18:55.247 回答
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可用于匹配以下内容:

  • “苹果香蕉橙”
  • “苹果橙”
  • “苹果香蕉”
  • “香蕉苹果”

或您输入列表的任何笛卡尔积。

于 2015-09-03T21:19:12.900 回答