Python 正则表达式 - 匹配类似 printf 的格式字符串及转义引号
我正在用Python写一个小的C++预处理器,目的是找到类似printf的格式字符串。我需要一个正则表达式,它可以从第一个引号匹配到第二个引号,但要忽略中间所有被转义的引号(也就是用反斜杠加引号表示的引号,比如'\"')。下面是一个例子:
foo(bar, "Value of \"s\" is: %s", "foobar");
我需要一个正则表达式来处理:
"Value of \"s\" is: %s"
到目前为止我有的内容是:
(".*?")
但是我还没有找到忽略转义引号的方法。我对这个还很陌生。如果有人能给我一个解决方案或建议,我会非常感激。
提前谢谢大家!
1 个回答
1
你可以试试下面这个正则表达式,它可以找到第一个和第二个 "
之间的所有字符。
\".*?[^\\]\"
>>> s = r'foo(bar, "Value of \"s\" is: %s", "foobar");'
>>> m = re.search(r'".*?[^\\]"', s)
>>> result = m.group(0)
>>> print result
"Value of \"s\" is: %s"
解释:
"
匹配第一个双引号。.*?
匹配任意字符,零次或多次。这里的?
表示尽量少匹配。[^\\]"
匹配到的双引号前面不能有\
符号。