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

如何修复re.sub正则表达式替换URL时的字符串截断问题?

修复URL替换后字符串不完整的问题

你写的正则http\S+匹配范围太宽泛——\S+会匹配所有非空白字符,所以从http开始,它会把后面的URL、单引号甚至末尾的括号全部包含进去,替换时这些内容都被换掉,自然得不到完整的目标字符串。

直接把正则改成http[^']+即可解决,[^']+表示只匹配到第一个单引号为止,刚好对应你场景里被单引号包裹的URL,不会误吞后面的单引号和括号。

测试代码:

import re

a = "https:192.168.1.1:8080"
fixed_result = re.sub(r'http[^']+', a, "tool(id='merge_tool', server='http://localhost:8080')")
print(fixed_result)
# 输出:tool(id='merge_tool', server='https:192.168.1.1:8080')

b = 'https:facebook.com'
fixed_result = re.sub(r'http[^']+', b, "tool(id='merge_tool', server='http://localhost:8080')")
print(fixed_result)
# 输出:tool(id='merge_tool', server='https:facebook.com')

如果之后遇到URL被双引号包裹的情况,可以把正则改成http[^'"]+适配两种引号;要是URL没有引号,还可以用http\S+(?=[,)])这种正向预查规则,匹配到逗号或括号前就停止,按需调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:01:30