re:匹配集重复中的任何单词

时间:2013-05-02 02:16:03

标签: python regex

给定一组可以按任何顺序排列的空格分隔单词,如何才能匹配给定单词集中的单词。比如说我有:

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

这是我尝试过的:

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

但我想要匹配苹果和香蕉。

2 个答案:

答案 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可用于匹配以下内容:

  • “apple banana orange”
  • “apple orange”
  • “apple banana”
  • “香蕉苹果”

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