什么是接受除三个字符之外的任何东西的最短正则表达式:|,^和〜(管道,插入符号和波浪号)?

时间:2010-11-27 19:07:22

标签: regex regex-negation

我有一个正则表达式,但它非常大。我指定了允许的字符集。 这使它成为一个很大的正则表达式。如果我可以指定相反的方式,即只指定我不接受的字符,那会更简单吗?

^[^\|\^~]*$

但它不起作用。任何线索?

2 个答案:

答案 0 :(得分:3)

这匹配任何地方不包含这三个字符的字符串:

^[^|^~]*$

虽然这匹配了包含任何三个字符串的所有字符串:

[|^~]

这两种模式是等价的,所以你可以使用第一种模式,也可以使用第二种模式进行否定。

答案 1 :(得分:1)

您不得在|内逃避~[]。使用^[^|^~]*$

>>> re.match(r'^[^|^~]*$', 'abc')
<_sre.SRE_Match object at 0x2dbc4a8>
>>> re.match(r'^[^|^~]*$', '^')
>>> re.match(r'^[^|^~]*$', '|')
>>> re.match(r'^[^|^~]*$', '~')

即。第一个示例匹配,其他三个示例根据需要失败。