给定一个字符串,我想创建一个只匹配无效的特定字符的正则表达式,例如“分号”,即括号或圆括号中的而不是。我可以编写一个匹配相反大小写的模式,但是如何反转(例如^
)模式呢?在
编辑:我需要一个通用的解决方案,其中分号和分隔符之间可以存在n个长度的字符;而不仅仅是零宽度匹配。在
>>> invalid = '2#2;a,a [4,4;b/b]'
>>> valid = '(2#2;a,a) [4,4;b/b]'
>>> pattern = r'(\(.+?\;.+?\))|(\[.+?\;.+?\])' # finds valid cases; want the opposite
# Result
>>>bool(re.findall(pattern, invalid))
True # overlooks the invalid subset '2;a'
>>> not re.findall(pattern, valid)
True
# Desired result
>>>bool(re.findall(pattern_inverse, invalid))
True
>>> bool(re.findall(pattern_inverse, valid))
False
使用交替运算符。捕获的
;
必须是那些括号之外的那个。在或者
^{pr2}$你可以用消极的向前看和向后看。要查找
;
后面没有字母和方括号的示例,可以执行以下操作:添加一个lookbehind可以得到如下效果:
^{pr2}$在lookbehind中有一些限制,尤其是不能使用“*”或“+”量词。在
如果您希望正则表达式与整个无效部分匹配,另一种方法是使用类似的方法。如果需要,可以使用一个捕获组来提取分号。在
相关问题 更多 >
编程相关推荐