Python 正则表达式 - 匹配类似 printf 的格式字符串及转义引号

0 投票
1 回答
1373 浏览
提问于 2025-04-18 15:38

我正在用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"

解释:

  • " 匹配第一个双引号。
  • .*? 匹配任意字符,零次或多次。这里的 ? 表示尽量少匹配。
  • [^\\]" 匹配到的双引号前面不能有 \ 符号。

撰写回答