如何修复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
相关产品推荐
相关产品推荐

