我目前有以下正则表达式:
/(_|[a-z]|[A-Z])(_|[a-z]|[A-Z]|[0-9])*/
我希望表达式不与“PI”匹配,但我没有这样做。 为了澄清,我希望以下内容有效: _PI、abcPI、PIpipipi 我只是不想接受 PI 本身。
最佳答案
在开始解决方案之前,请查看您的正则表达式:交替组内单个范围的字符类是编写正则表达式模式的低效方法。您只需将这些 ([A-Z]|[0-9]|_)+
合并到 [A-Z0-9_]+
即可。
解决方案可能是一个单词边界,其后带有负向前瞻:
r"\b(?!PI\b)[_a-zA-Z][_a-zA-Z0-9]*"
请参阅regex demo 。您可以将 [a-zA-Z0-9_]
替换为 \w
:
re.compile(r"\b(?!PI\b)[_a-zA-Z]\w*") # In Python 2.x, re.UNICODE is not enabled by default
re.compile(r"\b(?!PI\b)[_a-zA-Z]\w*", re.A) # In Python 3.x, make \w match ASCII only
详细信息
\b
- 字边界(?!PI\b)
- 紧靠右侧,不能有PI
作为整个单词[_a-zA-Z]
- ASCII 字母或_
[_a-zA-Z0-9]*
- 0 个或多个下划线、ASCII 字母或数字。
关于python - 排除正则表达式中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54835291/