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

ste*_*nos 3 regex-negation python-2.7

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

我想知道我是否可以做类似 [az 而不是 [cikmov]] 的事情。我正在使用 python 2.7。

Mar*_*ers 5

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

[^\W_0-9cikmov]
Run Code Online (Sandbox Code Playgroud)

[^...]是一个否定字符类,类中的所有内容都不能匹配。有了\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']
Run Code Online (Sandbox Code Playgroud)

所有字母都匹配,除了你的例外。