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

Python正则表达式拆分字符串求助:适配两种格式的可行方案

适配两种字符串的正则拆分方案

问题场景

现有两个待处理字符串:

'''N678 N−12.,13.12.22,18.,19.,31.1.,9.2.,7. au 10.,13. au 17.,20.,21.,22.,28.
au 31.3.,6.,13.,19.,20.4.,5.,8.5.23'''

'''N678 à p. du 11.6.23 C+23.6.23 N−14.,24.7.23'''

要求对第二个字符串拆分后得到:

['N678 à p. du 11.6.23 ', 'C+23.6.23 ', 'N−14.,24.7.23']

拆分规则:当文本中出现 任意字符\s\d{1,2}.\d{1,2}.\d{2,4}\s[A-Z] 格式时,在此处拆分。

之前的正则尝试存在兼容性问题:

  • 使用 ([A-Za-z].*?\d{1,2}\.\d{1,2}\.\d{2,4}\s*) 时,第二个字符串拆分正常,但第一个字符串会错误截断,得到:
    ['N678 N−12.,13.12.22', 'au 10.,13. au 17.,20.,21.,22.,28.\nau 31.3.,6.,13.,19.,20.4.,5.,8.5.23']
    
  • 去掉非贪婪匹配的问号后,第一个字符串拆分正常,但第二个字符串无法正确拆分。

可行正则方案

使用带正向预查的正则表达式,同时兼容两种字符串:

r'(.*?\d{1,2}\.\d{1,2}\.\d{2,4}\s*)(?=[A-Z]|$)'

正则逻辑说明

  • .*?:非贪婪匹配任意字符,防止过度匹配导致的错误截断
  • \d{1,2}\.\d{1,2}\.\d{2,4}:精准匹配日.月.年格式的日期(年支持2位或4位)
  • \s*:匹配日期后的零个或多个空白字符
  • (?=[A-Z]|$):正向预查,确保当前匹配段的后续内容是大写字母(触发拆分的条件)或字符串结尾(捕获最后一段内容)

效果验证

  1. 处理第二个字符串:
    拆分结果完全符合预期:

    ['N678 à p. du 11.6.23 ', 'C+23.6.23 ', 'N−14.,24.7.23']
    
  2. 处理第一个字符串:
    拆分结果正确,每个包含日期的段落都被独立拆分:

    ['N678 N−12.,13.12.22,18.,19.,31.1.,9.2.,7. ', 'au 10.,13. ', 'au 17.,20.,21.,22.,28.\n', 'au 31.3.,6.,13.,19.,20.4.,5.,8.5.23']
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:45:56