我正在尝试匹配一堆代码中的有效字符串,例如:
myvar = "abc"
->匹配“abc”。dict['key'] = 'value'
-> 分别匹配“key”和“value”。default_val = ''
-> 匹配 '' (空字符串)。
但是我不希望它与注释中的文档字符串或字符串匹配,例如
"""
some doc string
with some random 'string'
"""
#this comment contains "a string"
我也使用制表符缩进,因此可能需要将其包含在正则表达式中,并且我只想将实际字符串作为匹配项返回。
目前我已经设法做到这一点:
^\t*(?!#).+(?:[^\"\']{2,})[\"\'].*[\"\']$
这不起作用,而且可能永远不会像我想要的那样。
方法示例 查找行中第一个 " 或 ' 的情况: 如果“”或“”是行中的下一个,则跳过检查到“””或“'”的下一个实例之后 否则匹配下一个 " 或 ' 的情况,如果回看同一行没有 #
你可以先尝试匹配你想要丢弃的字符串。
\"\"\"(?:.|\s)*\"\"\"
^#.*$
最后,您可以尝试匹配您想要保留的字符串。
\"([^\"]*)\"
您可以使用命名捕获组来区分要丢弃的匹配项和要保留的匹配项。把所有的放在一起,正则表达式是
(?P<discard>\"\"\"(?:.|\s)*\"\"\"|^#.*$)|\"(?P<keep>[^\"]*)\"
。
我为 PHP 中的 PCRE 给出了 类似的答案。