正则表达式匹配字符串而不是文档或注释字符串

问题描述 投票:0回答:1

我正在尝试匹配一堆代码中的有效字符串,例如:

myvar = "abc"
->匹配“abc”。
dict['key'] = 'value'
-> 分别匹配“key”和“value”。
default_val = ''
-> 匹配 '' (空字符串)。

但是我不希望它与注释中的文档字符串或字符串匹配,例如

"""
some doc string
with some random 'string'
"""

#this comment contains "a string"

这两者都不应该匹配任何东西。

我也使用制表符缩进,因此可能需要将其包含在正则表达式中,并且我只想将实际字符串作为匹配项返回。

目前我已经设法做到这一点:

^\t*(?!#).+(?:[^\"\']{2,})[\"\'].*[\"\']$
这不起作用,而且可能永远不会像我想要的那样。

方法示例 查找行中第一个 " 或 ' 的情况: 如果“”或“”是行中的下一个,则跳过检查到“””或“'”的下一个实例之后 否则匹配下一个 " 或 ' 的情况,如果回看同一行没有 #

python regex sublimetext
1个回答
0
投票

你可以先尝试匹配你想要丢弃的字符串。

  • 文档字符串
    \"\"\"(?:.|\s)*\"\"\"
  • 评论
    ^#.*$

最后,您可以尝试匹配您想要保留的字符串。

  • \"([^\"]*)\"

您可以使用命名捕获组来区分要丢弃的匹配项和要保留的匹配项。把所有的放在一起,正则表达式是

(?P<discard>\"\"\"(?:.|\s)*\"\"\"|^#.*$)|\"(?P<keep>[^\"]*)\"

我为 PHP 中的 PCRE 给出了 类似的答案

© www.soinside.com 2019 - 2024. All rights reserved.