将任意 Python 字符串与 Python 正则表达式匹配?

Matching an arbitrary Python string with Python regex?

我正在使用 Python 源代码语料库。我希望将字符串替换为 STRING。 Python 字符串很烦人,因为它们允许使用如此多的分隔符。这是我尝试过的方法以及我 运行 遇到的问题。

这些是需要匹配的字符串种类。整个块是一个包含分隔符的字符串。

这些都是有效的字符串,但您可能会发现很难匹配它们的地方。本质上,我想要这个:

def hello_world():
    print("'blah' \"blah\"")

成为:

def hello_world():
    print( STRING )

为简单起见,假设整个 Python 文件都在一个字符串中。现在我正在逐行读取文件,但如果需要,我可以将其视为一个字符串。 文件的读取方式真的无关紧要。如果您的解决方案需要特定的方法,我会使用它。 我不确定这个问题可以用正则表达式完全解决。如果您有涉及其他代码的解决方案,我们也将不胜感激。

您可以尝试匹配带引号的字符串但允许转义的正则表达式:

[rR]?(?:'([^\']*(?:\.[^\']*)*)'|"([^\"]*(?:\.[^\"]*)*)")

Demo

虽然这可能会捕获大部分字符串,但我很确定仍有一些例外。

这是基于 J. Friedl 的 unrolling the loop 技术:

展开循环(使用双引号)

"                              # the start delimiter
 ([^\"]*                      # anything but the end of the string or the escape char
         (?:\.                #     the escape char preceding an escaped char (any char)
               [^\"]*         #     anything but the end of the string or the escape char
                      )*)      #     repeat
                             " # the end delimiter