正则表达式:匹配Python关键字

时间:2016-10-21 11:56:30

标签: python regex

我正在尝试使用正则表达式(在Python中)为Python创建语法高亮显示。除此之外,我想突出显示for, while, if等关键字。要做到这一点,我需要一个匹配它们的正则表达式。

我的问题是,我不想让for在字符串中匹配,只有在隔离时(前后空格)才会匹配。

我最初有\bfor\b,它匹配分隔的for的每次出现。这个问题是它包含"string with for inside"

之类的内容

我已经考虑了后视/前方(如this提出的问题),但无法解决这需要Python中的固定宽度模式。很想得到一些关于在这里尝试的事情的指导技巧。

简而言之:什么是正则表达匹配关键字,例如for,只有在Python解释时才会这样。

2 个答案:

答案 0 :(得分:0)

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

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

添加单引号和注释的情况为(\"[^"]*\"|'[^']*'|#.*$)。当然,如果字符串包含任何转义引号,这将会中断,因此您可以查找对此的修复,例如this question

答案 1 :(得分:-2)

要匹配之前的空格('示例中为'),之后至少有一个空格:

'^\s*for\s'

' ^'是行的开始,' \ s'在任何类型的空间(标签等)和' *'获得0或更多匹配。