【发布时间】:2020-06-12 23:33:43
【问题描述】:
我正在使用 Python 源代码语料库。我希望将字符串替换为STRING。 Python 字符串很烦人,因为它们允许使用很多分隔符。这是我尝试过的方法以及遇到的问题。
-
r'"(\\"|[^"])*"'和r"'(\\'|[^'])*'"这不起作用,因为如果字符串包含相反的分隔符。
-
r'(\'|"|\'\'\'|""")(?:\\\1|(?!\1))*\1'这是我的全部尝试,但前瞻不起作用。如果可能的话,我基本上想要
r'(\'|"|\'\'\'|""")(?:\\\1|[^\1])*\1'。 多行字符串搞砸了。您不能使用
[^"""],因为"""不是一个字符。- 包含其他分隔符的字符串,例如
"'"。 - 像
'\''这样的分隔符转义的字符串。
这些是需要匹配的字符串类型。整个块是一个包含分隔符的字符串。
'/$\'"`''\\''^__[\'\\"]([^\'\\"]*)[\'\\"]'"Couldn't do that"
这些都是有效的字符串,但您可能会看到很难匹配它们的地方。本质上,我想要这个:
def hello_world():
print("'blah' \"blah\"")
变成:
def hello_world():
print( STRING )
为简单起见,假设整个 Python 文件都在一个字符串中。现在我正在逐行读取文件,但如有必要,我可以将其视为一个字符串。 如何读取文件并不重要。如果您的解决方案需要特定方法,我将使用该方法。 我不确定这个问题可以用正则表达式完全解决。如果您有涉及其他代码的解决方案,我们也将不胜感激。
【问题讨论】:
-
为什么不在 AST 级别处理这个,而不是尝试正则表达式源?
-
我也在考虑这种方法,但我也想测试这种方法。
-
为什么不将
"""、'''、"和'的四个正则表达式与|连接起来? -
我已经尝试过了,但我在使用前瞻时遇到了问题。
-
@Mike 你能举一个有问题的 f 字符串的例子吗?
标签: python regex string regexp-replace