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

Python正则表达式未返回预期结果:如何调整正则规则?

问题分析与解决

原代码问题原因

  • 正则中的.未转义:.在正则里是匹配任意字符的通配符,原代码前瞻里的. Withey Limited实际是匹配任意字符加空格Withey Limited,完全偏离了匹配字面句号的需求。
  • 贪婪匹配+错误的字符集:原正则用了贪婪的+匹配,且字符集包含.,导致会把It was formerly known as 后面的内容一直匹配到最远的前瞻位置(也就是. It),连本该保留的. Withey Limited也被包含进匹配范围,替换后只剩后面的. It...。
  • 前瞻未做优先匹配:原代码把两个停止条件放在同一个前瞻里,贪婪模式下会选择最远的匹配项,无法实现优先在. Withey Limited停止的需求。

修正后的代码

使用非贪婪匹配+分支优先的正则,就能得到预期结果:

import re
txt = 'It was formerly known as A. Withey & Black Limited. Withey Limited delivers many things. It has a facility in the UK, including many branches.'
# 方案1:用前瞻定位停止点,替换掉前面的内容
out = re.sub(r'\s*It was formerly known as .*?(?=\. Withey Limited|\. It)', '', txt)
# 方案2:捕获停止点内容,替换为捕获组(效果一致)
# out = re.sub(r'\s*It was formerly known as .*?(\. Withey Limited|\. It)', r'\1', txt)
print(out)

修正说明

  • 非贪婪匹配.*?:确保匹配到第一个符合条件的停止点就停止,不会过度匹配。
  • 转义句号\.:明确匹配字面的句号,避免通配符干扰。
  • 分支顺序优先:把\. Withey Limited放在分支前面,正则会优先匹配这个停止点,只有当不存在时才匹配\. It,符合需求。

运行后输出:

Withey Limited delivers many things. It has a facility in the UK, including many branches.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:25