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

Python中使用正则表达式修复字符串缺失分号的问题

修复正则表达式以补充分隔地点的分号

你的原正则表达式匹配范围过于宽泛,会错误替换大量正常字符,导致结果混乱。我们需要精准定位数字(死亡率)后未加分号、直接衔接大写开头城市名的场景,以下是修正后的方案:

核心思路

缺失分号的位置特征是:数字 + (可选空格) + 大写字母开头的城市名,我们可以通过正则匹配这个模式,在数字和城市名之间插入分号。

修正后的代码

import re

mystring = "Birkenhead, 16; Birmingham, 15; Blackburn, 16; Bolton, 18 ; Bradford, 16 ; Brighton, 14 Bristol, 20; Cardiff, 25 ; Derby, 12 ; Halifax, 20; Biddersfield, 21 ; Hull, 19 ; Leeds, 22 ; Leicester, 18 ; London, 17; Manchester,15 ; Norwich, 24; Nottingham, 21; Oldham, 18 ; Plymouth, 19 Portsmouth, 15 ; Preston, 23 ; Salford, 14 ; Sheffield, 16 ; Sunderland, 18; Wolverhampton. 30. The rate in Edinburgh was 14 ;in Glasgow, 23 ; and in Dublin. 22."

# 补充分隔地点的分号
fixed_string = re.sub(r'(\d+)\s*(?=[A-Z])', r'\1; ', mystring)

# 可选:修复文本中的标点错误(如城市名后的句号改为逗号)
fixed_string = re.sub(r'([A-Za-z]+)\. (\d+)', r'\1, \2', fixed_string)

print(fixed_string)

正则表达式说明

  • (\d+):捕获一个或多个数字(即城市的死亡率)
  • \s*:匹配零个或多个空格,兼容数字后有空格或无空格的情况
  • (?=[A-Z]):正向预查,确保匹配位置的下一个字符是大写字母(城市名的首字母),避免误替换其他场景
  • 替换为\1; :保留捕获的数字,在其后添加分号和空格,补充分隔符

处理后效果

原文本中缺失分号的片段:

Brighton, 14 Bristol, 20
Plymouth, 19 Portsmouth, 15

会被修正为:

Brighton, 14; Bristol, 20
Plymouth, 19; Portsmouth, 15

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:46:19