Нечеткое совпадение / подстановочный знак подстроки со строкой - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть список следующих улиц

Fakestr. 1
Fakestr. 2
Fakestr. 3
.....
Fakestr. 11
Fakestr. 12
Fakestr. 13

И еще 20 тысяч таких.(Хочу, чтобы пример был маленьким).

Теперь у меня есть другой текстовый файл, в котором строка может содержать или не содержать комбинацию улицы и номера дома.

Например:

── Fakestreet_2-bla aha blatesttest\n
─ Fakestr._2-blablatesttest\n
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-blablatesttest\n') 
print(matchobj.group(0))
--> Result: Error. 
--> But thats ok.

matchobj = re.search('Fakestr(.*)2','── Fakestreet_2-bla aha blatesttest\n') 
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 номеров.Номер Housenumber в основном сразу после названия улицы.

1 Ответ

0 голосов
/ 14 сентября 2018

Похоже, вы хотите изменить .* на .*\d+ или .*[0-9_.,-]+, если вы разрешите использовать и другие символы, кроме цифр.

...