我正在尝试从地址中删除街道号码,例如大街 30 号。
简单的工作正常:
# remove numbers, strip remaining white space at left
re.sub(r'[0-9]+', '', '30 Main Street').lstrip()
'Main Street'
但是,有些数字上附加了字母或逗号,例如
30B Main Street
30b, Main Street
"大街30号">
我正在尝试包含附加到数字的逗号或字母。它的工作原理:
re.sub(r'[0-9]+w,', '', '30b, Main Street').lstrip()
'Main Street'
但现在它不适用于原始的简单地址:
re.sub(r'[0-9]+w,', '', '30 Main Street').lstrip()
'30 Main Street'
我尝试按照一些教程的建议使用|
向正则表达式添加"or",但现在这没有检测到任何字母:
re.sub(r'[0-9]+|[0-9]+w,', '', '30b, Main Street').lstrip()
'b, Main Street'
任何建议不胜感激。
您可以为字母或逗号指定可选字符类:
import re
pat = re.compile(r'bd+[a-z,]*s*', re.I)
print(pat.sub('', '30b, Main Street')) # Main Street
print(pat.sub('', '30 Main Street')) # Main Street
[a-z,]*
- 匹配零个或多个出现的字母a-z
或逗号,
s*
- 匹配零个或多次出现的空格字符s
(因此您无需在之后.lstrip()
(
如果您尝试匹配附加到数字的逗号或字母,则可以使用可选的字符 a-zA-Z 并匹配可选的逗号:
b[0-9]+[a-zA-Z]*,?s*
解释
b[0-9]+
匹配前面带有单词边界的 1+ 位数字,防止数字成为较大单词的一部分[a-zA-Z]*
匹配 0+ 字符 a-zA-Z,?s*
匹配可选的逗号和0+空格字符
正则表达式演示 |蟒蛇演示
import re
strings = [
"30B Main Street",
"30b, Main Street",
"30, Main Street",
"10 foobar street"
]
for s in strings:
print(re.sub(r'b[0-9]+[a-zA-Z]*,?s*', '', s))
结果
Main Street
Main Street
Main Street
foobar street
我建议先删除数字,就好像原来一样,然后使用第二行代码将逗号替换为空格,最后修剪任何空格。不是最优雅的解决方案,但非常简单且有效(至少在PHP中确实如此(。希望这有帮助!