Python—如何从字符串中提取地址,或者如何在另一行的某个内容之前获取单词?
我的样本内容如下Python—如何从字符串中提取地址,或者如何在另一行的某个内容之前获取单词?,python,Python,我的样本内容如下 content =""" Dear Customer, Detail of service affected: Bobs Builders Retail park The Aavenue London LDN 4DX Start Time & Date: 04/01/2017 00:05 Completion Time & Date: 04/01/2017 06:00 Details of Work: .... 我已经把
content ="""
Dear Customer,
Detail of service affected:
Bobs Builders
Retail park
The Aavenue
London
LDN 4DX
Start Time & Date: 04/01/2017 00:05
Completion Time & Date: 04/01/2017 06:00
Details of Work:
....
我已经把邮政编码拿出来了
postcodes = re.findall(r"[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][A-Z]{2}", content)
我也想从这个内容中得到城市,这可能吗?我需要先给它提供一份城市的名单吗?然后检查一下
或者有没有办法在邮政编码前打电话?因为地址总是那样发送的
我可以使用邮政编码regex来获取邮政编码前的单词吗
谢谢这里有一个例子:
import re
postcodes = re.findall(r"(\w+)\s+([A-Z]{3} \d[A-Z]{2})", content)
print postcodes
# => [('London', 'LDN 4DX')]
你可以得到两个组,第一个是在邮政编码前的单词(可能在另一行),第二个是邮政编码本身
为了使示例更具可读性,简化了邮政编码正则表达式
如果你想匹配任何英国代码,是一个很好的参考
顺便说一下,您提到的正则表达式与ldn4dx不匹配。为[0-9R]
添加?
可以:
postcodes = re.findall(r"[A-Z]{1,2}[0-9R]?[0-9A-Z]? [0-9][A-Z]{2}", content)
有多种方法可以解决此问题: 1-使用谷歌API地理定位 如果可以通过进行模式匹配来提取地址部分,则可以将地址传递给,并让它为您解析地址 2-正则表达式搜索 如果您确定地址的格式始终正确,并且邮政编码始终位于城市名称之前,则可以使用正则表达式处理以下情况:
(\w*)\s+([A-Z]{3}\s+\d[A-Z]{2})
3-使用城市名称数据库
如果地址的格式不总是很好,那么最好使用城市名称数据库,例如
4-使用实体提取API[最佳]
这是自然语言处理中信息提取的经典应用。您可以使用实现自己的功能,或者更好地使用web服务,例如。将您的文本复制并粘贴到他们的文档中,看看自己的功能有多强大。为什么不逐行解析您的内容?我该怎么做?如果每次的行号都不一样怎么办?你的内容的格式是否总是完全相同?在这种情况下,你可以阅读第8行的单词来获得城市。。。。或者,如果你总是在地址前加上“受影响的服务细节:”这句话,你可以在下一行写下…@AlexW,假设它是生成的内容(看起来像一封自动电子邮件),那么不管确切的内容是什么,它的结构肯定是相同的。如果您知道地址从“受影响的服务细节:”行之后的第一行非empy开始,那么解析地址块就很容易了。否则(如果它不是生成的内容,并且内容结构因案例而异),那么我真的帮不上忙。。。