我的测试字符串:
1. default, no hair, w/o glass
2. ski suit
3. swim suit
如何检测头发前是否有“no”或“w/o”(中间可能有超过 1 个空格)?
最终目标:
1. default, no hair, w/o glass returns False
1. default, no hair, w/o glass returns False
1. default, w/o hair, w/o glass returns False
1. default, w hair, w/o glass returns True
目标是判断是否应该使用玻璃。
我的尝试:(?<!no\s)hair
( http://rubular.com/r/PdKbmyxpGh )
你可以看到在上面的例子中,如果有超过 1 个空格,那么我的正则表达式将不起作用。
re
模块不支持可变长度(零宽度)后视。
您需要:
使用负前瞻的短函数:
def re_check(s):
return re.search(r'^[^,]+,\s+(?!(?:no|w/o)\s+hair,)', s) is not None
>>> re_check('default, no hair, w/o glass')
False
>>> re_check('default, w/o hair, w/o glass')
False
>>> re_check('default, w hair, w/o glass')
True
我是一名优秀的程序员,十分优秀!