从字符类中排除字符

2024-04-23 16:36:54 发布

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

是否有一种简单的方法来匹配一个类中除某一组字符外的所有字符?例如,如果在一种可以使用\w匹配所有unicode单词字符集的语言中,是否有方法仅从该匹配中排除下划线“\u1”之类的字符

我唯一想到的想法是在每个角色周围使用消极的前/后看,但当我实际上只想将角色与积极匹配和消极匹配进行匹配时,这似乎比必要的更复杂。例如if&;是一个接线员,我可以做这个

^(\w&[^_])+$

Tags: 方法语言角色ifunicode字符单词amp
3条回答

您可以使用\w类的否定(->;\W)并排除它:

^([^\W_]+)$

就我理解你的问题而言,消极前瞻是正确的方式:

^((?!_)\w)+$

这真的取决于你的正则表达式的味道

.NET

。。。仅提供一个简单的字符类集操作:subtraction。这对于您的示例来说已经足够了,因此您可以简单地使用

[\w-[_]]

如果一个-后面跟一个嵌套字符类,则会减去它。就这么简单

爪哇

。。。提供更丰富的character class set operations集合。特别是,您可以得到两个集的交集,如[[abc]&&[cde]](在本例中,这将给出c)。求交和求反结合在一起可以得到减法:

[\w&&[^_]]

Perl

。。。支持将extended character classes上的set操作作为实验特性(从Perl5.18开始提供)。特别是,可以直接减去任意字符类:

(?[ \w - [_] ])

所有其他口味

。。。(支持lookaheads)允许您通过使用负前瞻模拟减法:

(?!_)\w

这首先检查下一个字符是否不是_,然后匹配任何\w(由于负前瞻性,不能是_

请注意,这些方法都是完全通用的,因为您可以减去两个任意复杂的字符类

相关问题 更多 >