首页 > 解决方案 > 正则表达式 re.findall() 搜索以提取以 # 和邮政编码开头的单元

问题描述

我正在使用 Python 3.6 并尝试使用 re.findall() 提取一些以 # 开头的字符串和一些邮政编码的构建单元(按照在此处通过使用 regex 从 python 中的自由格式文本中提取电话号码获得的解释)。我不确切知道该结构是如何工作的,也没有得到我正在寻找的结果。这是我的代码

string='Road #10-13, Tree 26739  #23.04 934047 Holiday'
re.findall(r'[#][0-9(\)][0-9 ,\.\-\(\)]{8,}[0-9 ,\(\)]', string)

基本上我想获得类似的东西

['#10-13,','#23.04 934047 ']

但我之所以得到,是因为#10-13 后面有一个逗号:

['#23.04 934047 ']

我想在查询中更改的是字符串以 0-9 或“,”之间的数字结尾。因为即使我更改字符串并在 #23.04 之后添加一个“,”,我仍然会得到相同的结果。有人也可以向我解释 {8,} 的含义吗?

标签: pythonregexpython-3.x

解决方案


您可以使用前瞻。即,提取以 an 开头的部分字符串,#然后是任何内容,只要有一个非单词字符,例如空格或 , 后面紧跟字母

re.findall("#.+?(?=\\W+[A-Z])",string)
['#10-13', '#23.04 934047']

推荐阅读