regex 如何排除具有在另一个模式前面的向后查找的模式?

vnjpjtjt  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(82)

如果正则表达式模式在此正则表达式模式r"(?<=\s)|^)dont\s*"之前,如何不捕获或检测匹配
这是要用于排除匹配项的模式。它正确地使用了lookbehind "(?<=\s|^)dont"来检查单词"dont"之前的空格或字符串的开始。这样可以确保单词“dont”前面没有空格或字符串开头以外的任何字符。
基本上,我希望实现的是,如果在原始模式之前有一个"dont",它有一个空格"\s"或字符串"^"的开头,那么它不会检测到匹配,因此也不会捕获捕获组。

import re

#example 1 with capture, because it does not match this part of the pattern (?<=\s)|^)
#input_text = "I think Idont like a lot red apples" 
#example 2 not capture
input_text = "I think I dont like a lot red apples"

interests_match = re.search(r"(?:like\s*a\s*lot\s+(.+?)", input_text, flags = re.IGNORECASE)

if interests_match: print(interests_match.group(1))

字符串
每个示例的正确输出:

"red apples" #example 1
None #example 2

yrwegjxp

yrwegjxp1#

这应该能满足你的要求

r"(?:(?:^|\s)dont.*)|(?:like\s*a\s*lot\s+)(.+)"

字符串
第二个|左侧的模式如果包含^dont\sdont,则会跳过该行的其余部分,因此(.+)不会捕获任何内容。
注意:您需要检查组1匹配是否存在,以便不会出错。

相关问题