Python Regex语法故障:六个字内的匹配

时间:2018-02-12 21:20:50

标签: python regex

我试图在一个关键词的六个单词中找到匹配。有了这个,我正在尝试

regex_search = re.compile("(?=keyword)(\s+\S+|$){0,6}<match_string>")

但这似乎对我没有用,如下例所示。

>>> search_string = "The dog happily ran after his ball" 
>>> regex_search = re.compile('(?<=ran)(\s+\S+|$){0,2}dog')
>>> print(re.search(regex_search, search_string))
None

我希望这会返回一个搜索对象。

1 个答案:

答案 0 :(得分:0)

dog显示在ran的右侧,因此您在此处不会匹配。您可以使用替换组来匹配randogdogran之间的内容:

ran\s+(?:\S+\s+){0,6}dog|dog\s+(?:\S+\s+){0,6}ran

请参阅regex demo

<强>详情

  • ran - ran
  • \s+ - 1+空白字符
  • (?:\S+\s+){0,6} - 0到6次出现:
    • \S+ - 1 +非空白字符
    • \s+ - 1+空白字符
  • dog - dog
  • | - 或
  • dog\s+(?:\S+\s+){0,6}ran - 与上述类似,仅dogran切换。

请注意,要将dogran作为整个词匹配,您可以使用\b

rx = r'\bran\s+(?:\S+\s+){0,6}dog\b|\bdog\s+(?:\S+\s+){0,6}ran\b'

在声明正则表达式模式时,最好依靠原始字符串文字,注意r前缀(因此,无需在\中转义\b)。