python 否定搜索

标签 python regex

我有一个字符串作为

    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/

相关文章:

jQuery 将空格替换为 «-» 不适用于 <input type ="email"/>

c# - 跨数据注释/属性共享正则表达式的方法

regex - 将通用正则表达式转换为 bash 证明正则表达式

python - houghcircles - 寻找参数

python - 用python制作动态自定义图

python - 如何使用函数过滤数据框?

python - Google App Engine 中一个简单的 Python 正则表达式问题

python - Pandas 在日期之间进行切片,然后用零替换值

python - 在 Python 的每次迭代中更改名称以保存

arrays - 正则表达式:保留文本后的最后一个单词