匹配正则表达式,但不删除评论而不评论

时间:2016-11-02 14:28:11

标签: python regex

在这行代码中:

for iters in len(array) # for iters in len(array)
    for iters in len(array)

我正在尝试匹配forin,但在评论之外。

尝试使用此正则表达式(?<!#.)(\bfor\b|\bin\b),但会导致匹配:

*for* iters *in* len(array) # for iters *in* len(array)
    *for* iters *in* len(array)

它还匹配评论中的in。目前我不知道如何避免评论中的in

在这里看到了另一个解决方案,但这涉及删除评论,这在这种情况下不适用......

3 个答案:

答案 0 :(得分:1)

我认为你最好的选择就是在#&#39;#&#39;并且只在第一部分匹配,但是你需要确保你没有任何#&#39;#&#39;在字符串里面。

答案 1 :(得分:1)

如果您只是需要测试该行是否匹配,则可以use this

^[^#]*(\bfor\b|\bin\b)

如果您需要每次出现for和in,请尝试something like this

(?:^|\G)[^#]*?(\bfor\b|\bin\b)

(?:^|\G)可确保从该行的开头或上一场比赛停止的位置开始,没有#个字符。

答案 2 :(得分:-1)

使用非捕获组来处理评论。

因此: (\bfor\b|\bin\b)|(?:#.*)首先匹配for / in,然后非捕获组将与评论匹配并忽略这些评论。