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

Python 要匹配子字符串的正则表达式模式,python,regex,Python,Regex,要在字符串中查找以下模式: word++或-word++ 因此,它将迭代-word或word-模式,直到子字符串结束 字符串相当大,包含许多具有这些^patterns的单词。 已尝试了以下方法: p = re.compile('(?:\w+\-)*\w+\s+=', re.IGNORECASE) result = p.match(data) 但它不会返回任何结果。有人知道答案吗?您的正则表达式将只匹配第一个模式,match()只会找到一个匹配项,并且只有在它后面紧跟一些空格和等号时才会出现 此

要在字符串中查找以下模式:

word++
-word++

因此,它将迭代
-word
word-
模式,直到子字符串结束

字符串相当大,包含许多具有这些^patterns的单词。 已尝试了以下方法:

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

但它不会返回任何结果。有人知道答案吗?

您的正则表达式将只匹配第一个模式,match()只会找到一个匹配项,并且只有在它后面紧跟一些空格和等号时才会出现

此外,在您的示例中,您暗示您需要三个或更多的单词,因此以下是一个版本,该版本通过以下方式进行了更改:

  • 匹配两种模式(注意前导的
    -?
  • 仅当模式中至少有三个单词时才匹配(
    {2,}
    而不是
    +
  • 即使模式后面没有任何内容,也要进行匹配(
    \b
    匹配一个单词边界。这里实际上不需要这样做,因为前面的
    \w+
    保证我们仍然处于一个单词边界)
  • 返回所有匹配项,而不是仅返回第一个匹配项
  • 代码如下:

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

    试试
    p.findall(data)
    我不能评论,所以在回答这个问题时。对于这类东西,我最喜欢的是使用regexr.com测试一些有问题的regex的试验数据。当我这样做的时候,我总是能发现我错过了什么。另外,如前所述,芬德尔将获得所有比赛。希望这能有所帮助。另外,尝试用
    -?
    预先编写模式。注意你的问题不清楚。请添加示例输入和预期输出-您当前的正则表达式与您的描述不匹配。为什么结尾有
    =
    ?您可以在中使用正则表达式