2024-06-28 11:06:16 发布
网友
如何创建一个regex类,它是另外两个regex类的交集?例如,如何在不显式构造包含所有辅音的regex类的情况下搜索[a-z]和[^aeiou]的辅音:
[a-z]
[^aeiou]
[bcdfghjlkmnpqrstvwxyz] # explicit consonant regex class
角色类的差异或交集在re模块中不可用,那么您可以怎么做?在
使用范围:
[bcdfghj-np-tv-z]
使用\w字符类:
\w
前瞻(由于需要对每个字符进行测试,因此效率不高):
(?:(?![eiou])[b-z])
使用具有差异功能的新regex模块:
[[b-z] [eiou]]
这个regex应该能做到这一点:(?=[^aeiou])(?=[a-z])。在
(?=[^aeiou])(?=[a-z])
第一个组(?=...)断言模式[^aeiou]可以匹配,然后在开始处重新启动匹配,然后转到第二个模式(工作方式相同),它类似于logical ^{},只有当这两个表达式都匹配时,整个regex才会匹配。在
(?=...)
作为Python的re模块的替代,您可以使用^{}库显式地执行此操作,该库支持字符类的set操作:
re
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”)
The operators, in order of increasing precedence, are:
|| for union (“x||y” means “x or y”)
||
“x||y”
~~ (double tilde) for symmetric difference (“x~~y” means “x or y, but not > both”)
~~
“x~~y”
&& for intersection (“x&&y” means “x and y”)
&&
“x&&y”
(double dash) for difference (“x–y” means “x but not y”)
“x–y”
为了只匹配辅音,您的正则表达式可以是:
>>> regex.findall('[[a-z]&&[^aeiou]]+', 'abcde', regex.VERSION1) ['bcd']
或等效使用设置差:
角色类的差异或交集在re模块中不可用,那么您可以怎么做?在
使用范围:
使用
^{pr2}$\w
字符类:前瞻(由于需要对每个字符进行测试,因此效率不高):
使用具有差异功能的新regex模块:
这个regex应该能做到这一点:
(?=[^aeiou])(?=[a-z])
。在第一个组} ,只有当这两个表达式都匹配时,整个regex才会匹配。在
(?=...)
断言模式[^aeiou]
可以匹配,然后在开始处重新启动匹配,然后转到第二个模式(工作方式相同),它类似于logical ^{作为Python的} 库显式地执行此操作,该库支持字符类的set操作:
re
模块的替代,您可以使用^{为了只匹配辅音,您的正则表达式可以是:
或等效使用设置差:
^{pr2}$相关问题 更多 >
编程相关推荐