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

如何用正则表达式匹配以[2]开头行中指定位置到最后一个双引号间的完整内容

如何用正则表达式匹配以[2]开头行中指定位置到最后一个双引号间的完整内容

嗨,我来帮你搞定这个正则匹配的问题!你之前遇到的问题很典型——用[^"]+匹配的时候,会在第一个双引号就停下来,根本没法覆盖中间带双引号的完整内容对吧?

问题根源

你原来的正则(?<=\[2\][^=]+? 1 string data = ")[^"]+里,[^"]+的意思是“匹配任意不是双引号的字符”,所以只要遇到第一个双引号就会停止匹配,自然拿不到到最后一个双引号的完整内容。

解决方案

我们需要的是“从1 string data = "之后,一直匹配到该行最后一个双引号前的所有内容”,不管中间有多少个双引号。这里给你两种可行的正则写法:

写法一:正向预查(适合支持前瞻的正则引擎)

(?<=^\[2\].*?1 string data = ").*(?="[^"]*$)

各部分解释:

  • (?<=^\[2\].*?1 string data = "):先定位好起始位置——确保是行开头的[2],然后非贪婪匹配到1 string data = "这一段。
  • .*:贪婪匹配任意字符(单行模式下,.不包含换行;如果要支持多行内容,换成[\s\S]*或者启用单行修饰符s)。
  • (?="[^"]*$):确保后面跟着的是该行最后一个双引号——也就是这个双引号之后,直到行尾再也没有其他双引号了。

写法二:捕获组(兼容性更好,适合不支持前瞻的引擎)

^\[2\].*?1 string data = "(.*)"[^"]*$

这种写法把我们需要的内容放到了捕获组$1(或\1,取决于正则引擎)里,用法是匹配整行后,提取捕获组1的内容即可。

实战示例

拿你给的例子来说:
输入行:

[2]
1 string data = ""some text" in english" and "other""

用上面的正则匹配到的内容是:"some text" in english" and "other"
把这段内容替换成你想要的"un pò di testo" in Italiano" and "other"后,就能得到你期望的结果:

[2]
1 string data = ""un pò di testo" in Italiano" and "other""

小提醒

  • 如果你的文本是多行的,记得把.*换成[\s\S]*,或者给正则加上单行修饰符(比如Python里的re.S,JavaScript里的s flag),这样才能匹配换行符。
  • 注意[和]是正则的特殊字符,必须用\[和\]转义哦~

备注:内容来源于stack exchange,提问作者Kenryoku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:53:00