You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式匹配Python代码中含转义引号的字符串

解决Python字符串(含转义引号)的正则匹配问题

Got it, let's tackle this regex problem you're having! The issue with your original pattern "\"[^\"]*\"" is that it stops as soon as it hits a "—even if that quote is escaped with a backslash. Let's fix that.

核心思路

我们需要一个正则表达式,能匹配转义引号(\")或者任何非普通引号的字符,这样转义后的引号就不会被误判为字符串的结束符。

可行的正则表达式

这里是你需要的匹配模式:

"(?:\\"|[^"])*"

模式拆解:

  • ": 匹配开头的双引号。
  • (?:...): 非捕获分组(使用它是为了让re.findall直接返回完整的带引号字符串,而不是分组内的内容)。
    • \\": 匹配转义引号\"——这里的双反斜杠是因为正则本身会把反斜杠当作转义字符,所以需要额外转义一次。
    • |: 逻辑“或”操作符。
    • [^"]: 匹配任何不是普通双引号的单个字符。
  • *: 允许分组内容重复0次或多次(也能匹配空字符串)。
  • ": 匹配结尾的双引号。

Python使用示例

用你的源码测试一下这个正则:

import re

source_code = '''def someStuff(): return "blabla" myThing = "Bob told me: \\"Hello there!\\"" twoStrings = "first part " + "second part"'''
pattern = r'"(?:\\"|[^"])*"'

# 获取所有完整匹配结果
matches = re.findall(pattern, source_code)
print(matches)

运行后会输出你需要的所有目标字符串:

['"blabla"', '"Bob told me: \\"Hello there!\\""', '"first part "', '"second part"']

补充说明

  • 如果你想捕获引号内部的内容(不带前后的"),可以把模式改成带捕获分组的版本:"(\\|[^"])*",但此时findall会返回分组内的内容,而非完整的带引号字符串。
  • 这个模式适用于基础的双引号Python字符串。如果需要处理单引号、三引号或者更复杂的转义序列(比如\\后跟另一个反斜杠),需要扩展正则,但完全能满足你当前的需求。

内容的提问来源于stack exchange,提问作者Griffort

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:47:03