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

求助:如何编写正则表达式匹配指定的目标字符串片段?

解决正则匹配截断的问题

嘿,我明白你的困扰了——原来的正则因为非贪婪匹配的特性,遇到第一个空格就直接停了,所以只拿到了dqweqweqwe这部分。咱们来一步步修正它:

问题根源

你写的regex=r'script=(.*?) .*?='里,.*?是非贪婪模式,它会在遇到第一个满足后续条件的字符(也就是空格)时立刻停止匹配,自然就拿不到后面带空格和换行的完整片段了。

正确的正则写法

我们的目标是匹配script=之后,直到thisCanChange=之前的所有内容(包括换行和空格),可以用正向预查结合DOTALL模式来实现:

import re

string='script=dqweqweqwe qewq ewqewqewe$int_qwe$\nintqewwqe wqe thisCanChange=5711'
# 开启DOTALL模式让`.`匹配换行,用正向预查定位结束标记
regex=r'(?s)script=(.*?)(?=\s*thisCanChange=)'
match_result = re.search(regex, string)

if match_result:
    print(match_result.group(1))

运行这段代码,就能得到你想要的完整片段:

dqweqweqwe qewq ewqewqewe$int_qwe$
intqewwqe wqe

正则各部分解释

  • (?s):开启DOTALL模式,让.可以匹配换行符(默认.不匹配换行)
  • script=:匹配开头的固定前缀
  • (.*?):非贪婪匹配任意字符(现在包括换行),直到后面的正向预查条件满足
  • (?=\s*thisCanChange=):正向预查,确保当前位置后面跟着零个或多个空格,再加上thisCanChange=——这样匹配就会精准停在目标片段的结尾,不会包含后面的变量定义

替代方案(不用DOTALL)

如果你不想用(?s),也可以用[\s\S]来匹配所有字符(包括换行),正则可以写成:

r'script=([\s\S]*?)\s*thisCanChange='

这种写法和上面的效果完全一致,取group(1)就能得到目标片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:35:46