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
相关产品推荐
相关产品推荐

