我试图在一个关键词的六个单词中找到匹配。有了这个,我正在尝试
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
我希望这会返回一个搜索对象。
答案 0 :(得分:0)
dog
显示在ran
的右侧,因此您在此处不会匹配。您可以使用替换组来匹配ran
和dog
或dog
和ran
之间的内容:
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
- 与上述类似,仅dog
与ran
切换。请注意,要将dog
和ran
作为整个词匹配,您可以使用\b
:
rx = r'\bran\s+(?:\S+\s+){0,6}dog\b|\bdog\s+(?:\S+\s+){0,6}ran\b'
在声明正则表达式模式时,最好依靠原始字符串文字,注意r
前缀(因此,无需在\
中转义\b
)。