如何用正则表达式从地址字符串中提取纯单词内容?
问题解决方法
需求分析
你需要从给定地址中提取仅由纯字母组成的单词/短语(可包含空格分隔的多个单词),排除所有带数字、点号、连字符的内容,以及前缀缩写(如St.、Pr.)和后缀数字。原正则(\w+)仅能匹配单个单词,且会误匹配带数字/符号的片段,无法满足需求。
解决方案
推荐使用替换法:先定义正则匹配所有不需要的内容,将其替换为空,再清理多余空格即可得到目标结果。
正则说明
用于匹配需移除内容的正则:\S*[\d.-]\S*|,
\S*[\d.-]\S*:匹配任何包含数字(\d)、点号(.)或连字符(-)的连续非空白字符片段(如St.、7-th、B.O.、15、k.1)|,:同时匹配并移除逗号
代码示例(以Python为例)
import re # 输入地址列表 address_lines = [ "St. Washington, 80", "7-th mill B.O., 34", "Pr. Lakeview, 17", "Pr. Harrison, 15 k.1", "St. Hillside Avenue, 26" ] # 定义移除不需要内容的正则模式 clean_pattern = re.compile(r'\S*[\d.-]\S*|,') # 逐行处理提取目标内容 for line in address_lines: cleaned = re.sub(clean_pattern, '', line).strip() print(cleaned)
运行结果
Washington mill Lakeview Harrison Hillside Avenue
另一种思路:直接匹配目标内容
如果需要直接匹配目标,可使用正则:\b([A-Za-z]+(?:\s[A-Za-z]+)*)\b(?!.*[\d.-]),但需注意逐行匹配时可能需要调整,替换法更简单通用。
内容的提问来源于stack exchange,提问作者Andreas Hunter
相关产品推荐
相关产品推荐

