2017-04-13 381 views
0

想找到以下样式中的字符串:正则表达式匹配字符串

word-word-word++-word-word-word++

因此,它可以迭代-wordword-模式,直到字符串的结束。

该字符串非常大,并且包含许多带有^模式的单词。 已尝试以下方法:

p = re.compile('(?:\w+\-)*\w+\s+=', re.IGNORECASE) 
result = p.match(data) 

但它返回NONE。有人知道答案吗?

+0

尝试'p.findall(数据)' –

+0

另外,尽量在前面加上'模式 - '?注意你的问题不清楚。请添加示例输入和预期输出 - 您当前的正则表达式与您的描述不符。 –

+0

为什么你最后有'='? – vks

回答

1

您的正则表达式只会匹配第一个模式,匹配()只会查找一个匹配项,并且只有紧跟着一些空白和等号。

而且,在你的榜样,你暗示你想要三个或者更多的话,那么下面是在以下几个方面有所变化的一个版本:

  1. 同时匹配模式(注意是领先-?
  2. 比赛只如果至少有三个词的模式(的{2,}代替+
  3. 即使没有什么模式匹配后(在\b一个单词边界匹配。这是不是真的有必要在这里,因为前面的\w+瓜拉无论如何,我们都在字边界)
  4. 返回所有匹配,而不是只返回第一个匹配。

下面的代码:

#!/usr/bin/python 

import re 

data=r"foo-bar-baz not-this -this-neither nope double-dash--so-nope -yeah-this-even-at-end-of-string" 
p = re.compile(r'-?(?:\w+-){2,}\w+\b', re.IGNORECASE) 
print p.findall(data) 
# prints ['foo-bar-baz', '-yeah-this-even-at-end-of-string'] 
+0

这工作,返回了很多结果。谢谢 – ndm