如何用Python正则表达式删除标点符号前后的数字?
解决分号前后数字串的移除问题
嘿,我完全懂你遇到的困扰!你想要移除分号前后所有相连的数字串,但之前用\d;\d没效果,是因为这个正则只能匹配「单个数字+分号+单个数字」的情况,而你需要匹配的是「一串数字+分号+一串数字」,不管这两串数字有多少位。
正确的正则表达式方案
你需要用量词来表示“一个或多个数字”,对应的实现代码如下:
import re a = 'Car 1234 5678;91012 14567' a_new = re.sub(r'\d+;\d+', '', a) print(a_new) # 输出: 'Car 1234 14567'
这里的+是正则里的核心量词,意思是「匹配前面的元素(这里是\d,代表单个数字)1次或多次」,这样不管分号前后是4位、5位还是其他位数的数字,都会被完整匹配并替换为空字符串,正好符合你的需求。
额外补充(如果有需要)
如果分号前后可能存在空格(比如5678 ; 91012这种场景),可以调整正则来忽略空格干扰:
a_new = re.sub(r'\d+\s*;\s*\d+', '', a)
其中\s*表示匹配0个或多个空白字符(空格、制表符等),这样即使分号前后有空格也能正确匹配移除。
内容的提问来源于stack exchange,提问作者Arnold Klein




