除了字符集之外的Python正则表达式匹配

时间:2014-07-12 11:02:24

标签: python-2.7 regex-negation

我试图找到字符串中不是c,i,k,m,o或v的所有字符。我目前使用的正则表达式模式是[abd-hjlnp-wx-z]

我想知道我是否可以做[a-z而不是[cikmov]]之类的事情。我使用的是python 2.7。

2 个答案:

答案 0 :(得分:3)

您可以在此处使用否定字符类。以\W开头(不是一个字);否定这意味着 一个单词字符,但你可以添加所有例外:

[^\W_0-9cikmov]

[^...]是一个负面角色类,班级中的所有内容都必须匹配。使用\W表示范围az,AZ,0-9或下划线中的任何内容匹配时,^会反转,因此我们现在匹配所有字母,数字和下划线。

为此,我们添加了数字和下划线,所以现在它只会再次匹配字母。然后添加你的异常,它只匹配除c,i,k,m,o或v之外的所有字母。大写版本仍然匹配,除非你使正则表达式不敏感。

演示:

>>> import re
>>> re.findall(r'[^\W_0-9cikmov]', "Don't match 1232 or cikmov")
['D', 'n', 't', 'a', 't', 'h', 'r']

除了您的例外情况外,所有字母都匹配。

答案 1 :(得分:0)

是否 使用正则表达式?如果没有,一个简单的基于字符串的解决方案:

string = "the quick brown fox jumps over the lazy dog"

print [c for c in string if 'a' <= c.lower() <= 'z' and c not in 'cikmov']

# prints ['t', 'h', 'e', 'q', 'u', 'b', 'r', 'w', 'n', 'f', 'x', 'j', 'u', 'p', 's', 'e', 'r', 't', 'h', 'e', 'l', 'a', 'z', 'y', 'd', 'g']