我正在尝试使用正则表达式(在Python中)为Python创建语法高亮显示。除此之外,我想突出显示for, while, if
等关键字。要做到这一点,我需要一个匹配它们的正则表达式。
我的问题是,我不想让for
在字符串中匹配,只有在隔离时(前后空格)才会匹配。
我最初有\bfor\b
,它匹配分隔的for
的每次出现。这个问题是它包含"string with for inside"
我已经考虑了后视/前方(如this提出的问题),但无法解决这需要Python中的固定宽度模式。很想得到一些关于在这里尝试的事情的指导技巧。
简而言之:什么是正则表达匹配关键字,例如for
,只有在Python解释时才会这样。
答案 0 :(得分:0)
正如其他人所说,可能有更适合这项工作的工具。话虽如此,将正则表达式用于新用途总是很有趣,并且结合一点代码应该是可能的,而不是单个正则表达式。
现在,没有一种简单的方法可以排除字符串(正则表达式通常不能很好地处理配对分隔符),因此最简单的方法是创建一个文本副本,其中任何字符串都用空格替换,因此索引是相同的。像\"[^"]*\"
这样的东西可以找到所有字符串(好吧,双引号字符串),然后用相同长度的字符串替换每个匹配。然后运行正则表达式以查找修改后的字符串上的关键字。
添加单引号和注释的情况为(\"[^"]*\"|'[^']*'|#.*$)
。当然,如果字符串包含任何转义引号,这将会中断,因此您可以查找对此的修复,例如this question。
答案 1 :(得分:-2)
要匹配之前的空格('示例中为'),之后至少有一个空格:
'^\s*for\s'
' ^'是行的开始,' \ s'在任何类型的空间(标签等)和' *'获得0或更多匹配。