你可以用
import re
str_addr = '300114 г ТÑла, ТÑлÑÑÐºÐ°Ñ Ð¾Ð±Ð»Ð°ÑÑÑ, ÐенинÑкий Ñ-он, п Ð ÐССÐÐТ, 75, к.34, ÑÑлÑÑÐºÐ°Ñ Ð¾Ð±Ð», ÐÑаÑнодаÑÑкий кÑай, гагаÑина 38, ÑеÑпÑблика ХакаÑÐ¸Ñ ÐоÑква, СанкÑ-ÐеÑеÑбÑÑг'
res = re.findall(r"\b([Ð-Яа-ÑÑÐ][^\W\d_]*)\s+(?:[кÐ]Ñай|[оÐ]бл(?:аÑÑÑ)?)|\b[ÑÐ ]еÑп(?:Ñблика)?\s+([Ð-Яа-ÑÑÐ][^\W\d_]*)|([мÐ]оÑква|[ÑС]анкÑ-ÐеÑеÑбÑÑг)", str_addr)
print(["".join(x) for x in res])
# => ['ТÑлÑÑкаÑ', 'ÑÑлÑÑкаÑ', 'ÐÑаÑнодаÑÑкий', 'ХакаÑиÑ']
见
Python 3 demo
细节
-
\b([Ð-Яа-ÑÑÐ][^\W\d_]*)\s+(?:[кÐ]Ñай|[оÐ]бл(?:аÑÑÑ)?)
以下内容:
-
\b
-词边界
-
([Ð-Яа-ÑÑÐ][^\W\d_]*)
-第1组:一个俄文字母,后跟0+个字母
-
\s+
-1+空格
-
(?:[кÐ]Ñай|[оÐ]бл(?:аÑÑÑ)?)
-
ÐÑай
,请
кÑай
我是说,
облаÑÑÑ
我是说,
ÐблаÑÑÑ
我是说,
обл
我是说,
Ðбл
-
|
-或者
-
\b[ÑÐ ]еÑп(?:Ñблика)?\s+([Ð-Яа-ÑÑÐ][^\W\d_]*)
以下内容:
-
\乙
-词边界
-
[ÑÐ ]еÑп(?:Ñблика)?
-
РеÑпÑблика
/
РеÑп
有变化的
-
\ S公司+
-1+空格
-
([_-___''-_][^\W\D]*)
-第1组:一个俄文字母,后跟0+个字母
-
|
-或者
-
([мÐ]оÑква|[ÑС]анкÑ-ÐеÑеÑбÑÑг)
-第3组:
ÐоÑква
或
СанкÑ-ÐеÑеÑбÑÑг
是的。
这个
["".join(x) for x in res]
列表理解用于将空值放入返回的元组列表中。