匹配子字符串的正则表达式模式

时间:2017-04-13 06:20:03

标签: python regex

想在字符串中找到以下模式:

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

这样它就会迭代-wordword-模式,直到子字符串结束。

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

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

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

1 个答案:

答案 0 :(得分:1)

你的正则表达式只匹配第一个模式,match()只会找到一个匹配项,只有紧接着它后面跟着一些空格和等号。

此外,在您的示例中,您暗示您想要三个或更多单词,因此这里是一个通过以下方式更改的版本:

  1. 匹配两种模式(请注意前导-?
  2. 仅在模式中至少有三个字时才匹配({2,}而不是+
  3. 匹配,即使模式后面没有任何内容(\b与单词边界匹配。这里没有必要,因为前面的\w+保证我们无论如何都处于单词边界)
  4. 返回所有匹配,而不是仅返回第一个匹配。
  5. 以下是代码:

    #!/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']