【问题标题】:Regex: Match a Python keyword正则表达式:匹配 Python 关键字
【发布时间】:2016-10-21 11:56:30
【问题描述】:

我正在尝试使用正则表达式(在 Python 中)为 Python 制作语法荧光笔。除其他事项外,我想突出显示关键字,例如 for, while, if 等。为此,我需要一个匹配它们的正则表达式。

我的问题是,例如,我不希望 for 在字符串内时匹配,只有在隔离时(前后有空格)才匹配。

我一开始有\bfor\b,它匹配每个出现的分隔for。问题在于它包含 "string with for inside"

之类的内容

我曾考虑过后视/前瞻(正如this 问题所暗示的那样),但无法解决这需要 Python 中的固定宽度模式。很想在这里获得一些关于尝试的指导提示。

简而言之: 什么可能是正则表达式匹配关键字,例如 for,只有当 Python 解释为这样时。

【问题讨论】:

  • 为什么要投票结束???这个问题绝对没有错!
  • @barakmanos 可能是因为这个问题被问了很多次?
  • 我认为令牌模块的运气会更好,而不是重新。
  • @ThomasAyoub:那么在这种情况下,可能重复的建议在哪里???关闭此类问题有一个特定类别,我认为这里没有使用它。
  • 多行注释会很麻烦...

标签: python regex


【解决方案1】:

正如其他人所提到的,可能有更适合这项工作的工具。话虽如此,将正则表达式用于新用途总是很有趣,并且结合一点代码应该是可能的,而不是单个正则表达式。

现在,没有一种简单的方法可以排除字符串(正则表达式通常不能很好地处理配对分隔符),因此最简单的方法是创建文本副本,并将任何字符串替换为空格,这样索引是相同的。像\"[^"]*\" 这样的东西来查找所有字符串(嗯,双引号字符串),然后用相同长度的字符串替换每个匹配项。然后运行您的正则表达式以在修改后的字符串上查找关键字。

为单引号和 cmets 添加 case 将是 (\"[^"]*\"|'[^']*'|#.*$)。当然,如果字符串包含任何转义引号,这将中断,因此您可以寻找解决方法,例如this question。

【讨论】:

  • 我不确定替换引号如何有助于匹配关键字。请解释一下好吗?
  • 您必须将处理分成两个步骤,因此在第一步中将任何字符串或 cmets 替换为空格,因为您不想匹配其中的关键字。在第二步中,在已删除 cmets 的此版本字符串中查找关键字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2013-11-21
  • 2016-07-01
  • 2013-09-22
  • 1970-01-01
  • 2020-11-29
相关资源
最近更新 更多