Python使用re正则移除地址中#、Apt、Unit等后跟编号的后缀内容
正则错误原因
你原有正则的#.*使用了贪婪匹配规则,.默认匹配除换行符外的所有字符,会从#所在位置一直匹配到整个字符串末尾,因此逗号及后面的城市、邮编内容都会被误删,同时开头的捕获组(\\.*)写法错误,不符合匹配街道名称的需求。
正确实现代码
import re # 匹配规则:空白字符开头 + 单元号前缀 + 单元号内容(匹配到逗号前停止) pattern = r'\s+(#|Apt|Unit|Suite)\s*[^,]+' # 测试示例1:带#号单元号 string1 = "5956 Executive Dr #101, Fitchburg, WI 53719" string2 = re.sub(pattern, "", string1) print(string2) # 输出:5956 Executive Dr, Fitchburg, WI 53719 # 测试示例2:带Apt、Unit、Suite等类型的单元号,支持大小写匹配(加flags=re.IGNORECASE) string3 = "123 Main St apt 3, New York, NY 10001" string4 = re.sub(pattern, "", string3, flags=re.IGNORECASE) print(string4) # 输出:123 Main St, New York, NY 10001
规则说明
\s+:匹配单元号前的一个或多个空白字符,避免删除内容后出现多余空格(#|Apt|Unit|Suite):匹配所有需要识别的单元号前缀,可根据需求自行补充其他前缀\s*:匹配前缀和单元号内容之间可选的空白字符,兼容#101、# 101两种写法[^,]+:匹配除逗号外的所有字符,确保不会误删逗号及之后的城市、邮编内容- 加
flags=re.IGNORECASE可兼容小写、大小写混合的前缀写法,比如apt、unit、Suite都能正常匹配
内容的提问来源于stack exchange,提问作者DiamondJoe12
相关产品推荐
相关产品推荐

