使用正则表达式的地址格式 - 在邮政编码之前添加状态
Address formatting using regex - add state before zip code
我的地址格式如下:
street address, town zip
我需要在邮编前加上国家缩写,它总是5位数字。
我想我应该使用 regex
来做如下的事情,但我不知道如何完成它:
instr = "123 street st, anytown 12345"
state = 'CA'
outstr = re.sub(r'(???)(/\b\d{5}\b/g)', r'state', instr)
我的问题是要在 ???
中放入什么以及我是否在 outstr
中正确使用了 state
变量。另外,我的 zip
正则表达式是否正确?
您也可以使用 rsplit
来做到这一点:
instr = "123 street st, anytown 12345"
state = 'CA'
address, zip_code = instr.rsplit(' ', 1) # ['123 street st, anytown', '12345']
print '%s %s %s' % (address, state, zip_code)
>> "123 street st, anytown CA 12345"
来自 str.rsplit
文档:
str.rsplit([sep[, maxsplit]])
Return a list of the words in the
string, using sep as the delimiter string. If maxsplit is given, at
most maxsplit splits are done, the rightmost ones.
- 您不能将变量 "state" 直接放入替换字符串中。您应该使用 python 字符串格式来引用变量。
- 保持正则表达式简单,假设数据简单。如果 ZIP 总是出现在字符串的末尾,那么就从末尾开始匹配,使用 $.
让我试试:
instr = "123 street st, anytown 12345"
# Always strip the trailing spaces to avoid surprises
instr = instr.rstrip()
state = 'CA'
# Assume The ZIP has no trailing space and in last position.
search_pattern = r"(\d{5})$"
#
# Format the replacement, since I search from the end, so group 1 should be fined
replace_str = r"{mystate} \g<1>'.format(mystate = state)
outstr = re.sub(search_pattern, replace_str, instr)
@Forge 示例简洁明了。但是,使用 str.rsplit() 时需要注意数据质量。例如
# If town and zip code stick together
instr = "123 street st, anytown12345"
# or trailing spaces
instr = "123 street st, anytown 12345 "
通用修复方法是使用条带和正则表达式,如我的代码所示。总是提前考虑输入数据的质量,一些代码在经过单元测试后会失败。
我的地址格式如下:
street address, town zip
我需要在邮编前加上国家缩写,它总是5位数字。
我想我应该使用 regex
来做如下的事情,但我不知道如何完成它:
instr = "123 street st, anytown 12345"
state = 'CA'
outstr = re.sub(r'(???)(/\b\d{5}\b/g)', r'state', instr)
我的问题是要在 ???
中放入什么以及我是否在 outstr
中正确使用了 state
变量。另外,我的 zip
正则表达式是否正确?
您也可以使用 rsplit
来做到这一点:
instr = "123 street st, anytown 12345"
state = 'CA'
address, zip_code = instr.rsplit(' ', 1) # ['123 street st, anytown', '12345']
print '%s %s %s' % (address, state, zip_code)
>> "123 street st, anytown CA 12345"
来自 str.rsplit
文档:
str.rsplit([sep[, maxsplit]])
Return a list of the words in the string, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done, the rightmost ones.
- 您不能将变量 "state" 直接放入替换字符串中。您应该使用 python 字符串格式来引用变量。
- 保持正则表达式简单,假设数据简单。如果 ZIP 总是出现在字符串的末尾,那么就从末尾开始匹配,使用 $.
让我试试:
instr = "123 street st, anytown 12345"
# Always strip the trailing spaces to avoid surprises
instr = instr.rstrip()
state = 'CA'
# Assume The ZIP has no trailing space and in last position.
search_pattern = r"(\d{5})$"
#
# Format the replacement, since I search from the end, so group 1 should be fined
replace_str = r"{mystate} \g<1>'.format(mystate = state)
outstr = re.sub(search_pattern, replace_str, instr)
@Forge 示例简洁明了。但是,使用 str.rsplit() 时需要注意数据质量。例如
# If town and zip code stick together
instr = "123 street st, anytown12345"
# or trailing spaces
instr = "123 street st, anytown 12345 "
通用修复方法是使用条带和正则表达式,如我的代码所示。总是提前考虑输入数据的质量,一些代码在经过单元测试后会失败。