我试图找到字符串中不是c,i,k,m,o或v的所有字符。我目前使用的正则表达式模式是[abd-hjlnp-wx-z]
。
我想知道我是否可以做[a-z而不是[cikmov]]之类的事情。我使用的是python 2.7。
答案 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']