用转义序列匹配字符串相当容易:
"(\\.|[^"])*"
但是,如果我不仅想支持 Python 的三重引号字符串 ("""hello"""
),还想支持带有任意数量引号的字符串(只要开头与结尾匹配)怎么办?
("+)(.*?)\1
会这样做,但我失去了对转义序列的支持,因为 "hello\"world"
应该完全匹配。
其他应该完全匹配的例子:
"""hello world"""""
(字符串以两个引号结尾)""hello\""world""
(中间有两个引号,但其中一个被转义,另一个不足以单独结束字符串)<
这甚至可以用正则表达式实现吗?
最佳答案
这个怎么样:
^("+)((.*?)(?<!\\)(?:\\\\)*)\1$
我之前有一个更简单的表达式,但它在 "hello world\\"
上失败了,所以我更新了回顾,允许在结束引号之前出现偶数个反斜杠, 但不允许奇数个反斜杠。使用的正则表达式语法是 PCRE。
fiddle here .
关于正则表达式匹配 n 引号字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113977/