zzong2019 发表于 2022-2-13 11:45:17

使用正则表达式拆分一个地址信息

本帖最后由 zzong2019 于 2022-2-13 11:56 编辑

我现在有一个地址信息,格式基本上是以**省/自治区**市/自治州/地区/盟**区/县/自治县/旗/自治旗**街道/乡/镇**小区名称/村/街/路**号这样的,我需要使用正则表达式进行匹配,将其切分后返回一个字典,我的写法如下:
import re
string='浙江省杭州市上城区复兴街道复兴南苑'
expr=r'''
(?P<province>[\u4e00-\u9fa5]{2,6}?(?:省|自治区)){0,1}
(?P<city>[\u4e00-\u9fa5]{2,6}?(?:市|自治州|地区|盟)){0,1}
(?P<distinct>[\u4e00-\u9fa5]{2,6}?(?:区|县|自治县|旗|自治旗)){0,1}
(?P<street>[\u4e00-\u9fa5]{2,6}?(?:乡|镇|街道)){0,1}
(?P<community>[\u4e00-\u9fa5]*){0,1}
'''
re.search(expr,string).groupdict()
报错如下:AttributeError: 'NoneType' object has no attribute 'groupdict'
我知道这个就是说我用正则表达式没有匹配出来数据,因此返回的是None,无法使用groupdict方法,但是我不知道上面的正则表达式写法是错在哪里,可否请各位大佬指点一下呢?

isdkz 发表于 2022-2-13 11:45:18

本帖最后由 isdkz 于 2022-2-13 12:21 编辑

因为你用了''',它会给你换行的地方自动加上'\n',你多了换行符当然匹配不上了,

你想让它忽略你的换行的话加上 re.X ,即re.search(expr,string, re.X).groupdict()

还有你想看到结果的话用print打印一下print(re.search(expr,string, re.X).groupdict())

isdkz 发表于 2022-2-13 12:17:16

建议不要发悬赏贴,悬赏贴没有技术值拿

zzong2019 发表于 2022-2-13 12:52:18

isdkz 发表于 2022-2-13 12:10
因为你用了''',它会给你换行的地方自动加上'\n',你多了换行符当然匹配不上了,

你想让它忽略你的换行 ...

你回答的好清楚啊!非常感谢~~~

isdkz 发表于 2022-2-13 13:04:24

zzong2019 发表于 2022-2-13 12:52
你回答的好清楚啊!非常感谢~~~

不客气{:5_109:},你的正则表达式功底挺深厚的嘛

zzong2019 发表于 2022-2-13 13:08:00

isdkz 发表于 2022-2-13 13:04
不客气,你的正则表达式功底挺深厚的嘛

也是参考人家的代码学的啦,今天刚完全搞懂这段代码的含义~~~
页: [1]
查看完整版本: 使用正则表达式拆分一个地址信息