两个正则表达式类的交集

2024-06-28 11:06:16 发布

您现在位置:Python中文网/ 问答频道 /正文

如何创建一个regex类,它是另外两个regex类的交集?例如,如何在不显式构造包含所有辅音的regex类的情况下搜索[a-z][^aeiou]的辅音:

[bcdfghjlkmnpqrstvwxyz] # explicit consonant regex class

Tags: 情况classregex辅音explicitaeiouconsonantbcdfghjlkmnpqrstvwxyz
3条回答

角色类的差异或交集在re模块中不可用,那么您可以怎么做?在

使用范围:

[bcdfghj-np-tv-z]

使用\w字符类:

^{pr2}$

前瞻(由于需要对每个字符进行测试,因此效率不高)

(?:(?![eiou])[b-z])

使用具有差异功能的新regex模块:

[[b-z] [eiou]]

这个regex应该能做到这一点:(?=[^aeiou])(?=[a-z])。在

第一个组(?=...)断言模式[^aeiou]可以匹配,然后在开始处重新启动匹配,然后转到第二个模式(工作方式相同),它类似于logical ^{},只有当这两个表达式都匹配时,整个regex才会匹配。在

作为Python的re模块的替代,您可以使用^{}库显式地执行此操作,该库支持字符类的set操作:

The operators, in order of increasing precedence, are:

|| for union (“x||y” means “x or y”)

~~ (double tilde) for symmetric difference (“x~~y” means “x or y, but not > both”)

&& for intersection (“x&&y” means “x and y”)

(double dash) for difference (“x–y” means “x but not y”)

为了只匹配辅音,您的正则表达式可以是:

>>> regex.findall('[[a-z]&&[^aeiou]]+', 'abcde', regex.VERSION1)
['bcd']

或等效使用设置差:

^{pr2}$

相关问题 更多 >