正则表达式在Pythex可运行但pandas提取地址为空如何解决
问题原因
- 正则未使用Python原始字符串(
r前缀):你写的正则中包含\b转义标识,普通Python字符串会将\b解析为退格控制符,而非正则语法里的单词边界,直接导致匹配逻辑完全失效,这是返回结果全空的核心原因。 - 单词边界逻辑存在隐患:多词组成的州名(如NORTH CAROLINA、NEW YORK)中间带有空格,原有正则的
\b位置在部分场景下会出现匹配偏差。 findall返回结果为列表格式:直接赋值的话列内容会是列表类型,需要额外提取首个匹配结果才能得到字符串格式的地址。
解决方案
修正后代码
import pandas as pd # 正则逻辑: # 1. [0-9]{2,6} 匹配开头2-6位的门牌号数字 # 2. (?:\s+[A-Z0-9]+){2,10} 非捕获组,匹配2到10个空格+字母/数字组成的地址分段 # 3. \s+(?:FLORIDA|NORTH CAROLINA|NEW YORK) 匹配结尾的州名 pattern = r'[0-9]{2,6}(?:\s+[A-Z0-9]+){2,10}\s+(?:FLORIDA|NORTH CAROLINA|NEW YORK)' # 提取首个匹配结果赋值给Address列 df['Address'] = df['Text'].str.findall(pattern).str[0]
运行上述代码后即可得到你预期的Address列输出。
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

