我正在尝试使用正则表达式来接受包含转义序列的字符串。
text = '"match""'
x = re.match('"(\\n|\\"|\\\\|[^"\n])*"',text)
print(x.group(0))
输出:
"match""
所需输出:
"match"
由于某种原因,它与最后一个双引号匹配,而它应该与第一个未转义的双引号匹配,我不明白为什么。因为它应该只接受不在列出的转义序列中的任何内容,即不是双引号或换行符的内容。
我也尝试过非贪婪。通过这个测试
text = '"match\\""'
x = re.match('"(\\n|\\"|\\\\|[^"\n])*?"',text)
print(x.group(0))
但是正如您可能猜到的那样,无论它是否具有转义序列,它都会匹配第一个双引号。
在过去,我通过随机输入不同的组合或添加更多反斜杠,设法通过反复试验来解决这个问题,但我宁愿了解发生了什么以及为什么会失败,而是随机地进行处理。
普通字符串中的双反斜杠会变成正则表达式模式中的单反斜杠。例如,
'\\"'
-> \"
。正则表达式引擎可能被编码为忽略 \"
中无意义的反斜杠,只匹配任何 "
。