我得到了以下街道的列表
Fakestr. 1
Fakestr. 2
Fakestr. 3
.....
Fakestr. 11
Fakestr. 12
Fakestr. 13
以及其他一些 20k。(希望保持示例较小(。
现在我得到了另一个文本文件,其中一条线可以或不能容纳街道和 Housnumber 组合。
例如:
── Fakestreet_2-bla aha blatesttestn
─ Fakestr._2-blablatesttestn
Fakestreet 5_2017
── Fakestreet_2-jo-what
500000222 Fakestreet 13 .sdfs
Fakestreet_7
dsd Fakestreet 13 hae
500000 Fakestreet 12-14 d
Fakestreet 1 hey what 249
所以我尝试了不同的方法,使用difflib(difflib.get_close_matches,SequenceMatcher(,wuzzyfuzzy等。 它没有按预期工作。
到目前为止,我存档了最好的结果:
import re
matchobj = re.search('Fakestr(.*)12','─ Fakestr._2-blablatesttestn')
print(matchobj.group(0))
--> Result: Error.
--> But thats ok.
matchobj = re.search('Fakestr(.*)2','── Fakestreet_2-bla aha blatesttestn')
print(matchobj.group(0))
--> Result: Fakestreet 2
--> Thats ok
matchobj = re.search('Fakestr(.*)5','Fakestreet 5_2017')
print(matchobj.group(0))
--> Result: Fakestreet 5
--> Thats ok
matchobj = re.search('Fakestr(.*)2','── Fakestreet_2-jo-what')
print(matchobj.group(0))
--> Result: Fakestreet 2
--> Thats ok
matchobj = re.search('Fakestr(.*)7','── Fakestreet_7')
print(matchobj.group(0))
--> Result: Fakestreet 7
--> Thats ok
matchobj = re.search('Fakestr(.*)5','500000 Fakestreet 1-5 .sdfs')
print(matchobj.group(0))
--> Result: Fakestreet 1-5
-->That would be okay i can solve this cases later
matchobj = re.search('Fakestr(.*)5','dfsd Fakestreet 5,6 aaf')
print(matchobj.group(0))
--> Result: Fakestreet 5
-->Thats ok
matchobj = re.search('Fakestr(.*)6','500000222 Fakestreet 5,6 .sdfs')
print(matchobj.group(0))
--> Result: Fakestreet 5,6
-->Thats ok
matchobj = re.search('Fakestr(.*)14','Fakestreet 1 hey what 249')
print(matchobj.group(0))
--> Result: Fakestreet 1 hey what 124
--> Thats wrong
matchobj = re.search('Fakestr(.*)1','500000222 Fakestreet 12-14 .sdfs')
print(matchobj.group(0))
--> Result: Fakestreet 12-1
--> Thats wrong
matchobj = re.search('Fakestr(.*)1','222 Fakestreet 13 .sdfs')
print(matchobj.group(0))
--> Result: Fakestreet 1
--> Thats wrong
那么后面的三个案例该如何处理呢?(仅(有一些限制:门牌号不能超过 3 个数字。门牌号大多在街道名称之后。
看起来您想将.*
更改为.*d+
或.*[0-9_.,-]+
如果您也允许数字以外的某些字符。