使用正则按多分隔符拆分文本时如何忽略邮箱、小数、URL中的点
多分隔符文本拆分正则修改方案
修改后的可直接运行代码如下:
import re text = "This is a test. I love it here!!!! I hate this weather!! What should I do?? It's great. My email is cmw@example.com. My website is www.example.com and it's been live for 2.5 months." arr = [] # 用finditer逐个匹配符合规则的分句 for match in re.finditer(r'(.*?)(?<!\d)(?<!@\w*)([.!?;]+)(?!\d)', text): # 分句内容加首个分隔符,符合连续分隔符仅保留1个的要求 arr.append(match.group(1) + match.group(2)[0]) print(arr)
运行后输出和你给出的预期结果完全一致。
正则修改逻辑说明
- 替换原有split方案为
finditer逐句匹配,省去过滤空值的额外处理步骤 - 新增三层断言过滤不需要拆分的点场景:
(?<!\d):分隔符前不能是数字,排除小数的小数点拆分场景(?!\d):分隔符后不能是数字,进一步校验小数场景(?<!@\w*):分隔符前不能存在@加字母的前缀,排除邮箱域名中.的拆分场景
- 匹配连续分隔符后仅取第一个,满足连续
!!!/??仅保留1个分隔符的要求,同时自动覆盖URL域名中点的过滤逻辑。
内容的提问来源于stack exchange,提问作者Callum Matthews
相关产品推荐
相关产品推荐

