python - 排除正则表达式中的字符串

标签 python regex

我目前有以下正则表达式:

/(_|[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/

相关文章:

python - 根据条件 pandas python 将行保存到文件

java - 匹配 "#word1-word2-word3..."

ios - 我怎么知道正则表达式的哪一部分与 Objective-c 匹配

regex - Bash 正则表达式比较问题

python - 在 Windows 中从 SAS 捕获 stdout 和 stderr?

python - 使用上下文管理器临时覆盖语言环境

python - 问题在于变量定义。我不确定如何解决

javascript - 仅使用文本偏移量在字符串中插入标签

python - 遍历包含 8526 个项目的列表,获取索引超出范围错误

python - arg和atan2不同的原因