我有一个字符串作为
string = '''
making the regex for project
is the basic work '''
如果正则表达式库包含“project”而不是“work”,则它必须匹配。
我是这样写的:
bool(re.search('project.*(?!work)'))
它正在返回找到的真实值。但它必须返回 false。
最佳答案
由于回溯,在带有惰性或贪婪量词的量化模式之后放置负前瞻几乎不会产生预期结果:一旦 .*
匹配除换行符以外的 0+ 个字符,它就会检查前瞻模式,并且由于在第一行结束后没有 work
,所以结果为 true。
要修复正则表达式,您需要确保 .
匹配换行符(传递 re.DOTALL
修饰符或添加 (?s)
在开头)并将 .*
移动到前瞻:
re.search(r'project(?!.*work)', s, re.DOTALL)
参见 regex demo .
这个模式的意思是:找到project
,然后如果在任意0+个字符后有check
子字符串,则匹配失败。
请注意,如果您打算按原样使用此正则表达式,使用 if 'project' in s and 'work' not in s
来检查相同的内容可能更有意义。
关于 python 否定搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47990782/