我有字符串,包含地址
str_addr = '300114 г Тула, Тульская область, Ленинский р-он, п РАССВЕТ, 75, к.34, тульская обл, Краснодарский край, гагарина 38, республика Хакасия'
我需要提取
Тульская, тульская, Краснодарский, Хакасия
我尝试使用
re.findall(r"\b[А-Я]\w*\s+(?:[кК]рай|[оО](бласть|бл))|\b[рР](еспублика|есп)\s+[А-Я]\w*", str_addr)
但是我得到一个空列表。
我该如何解决?
答案 0 :(得分:1)
您可以使用
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])
# => ['Тульская', 'тульская', 'Краснодарский', 'Хакасия']
详细信息
\b([А-Яа-яёЁ][^\W\d_]*)\s+(?:[кК]рай|[оО]бл(?:асть)?)
:
\b
-单词边界([А-Яа-яёЁ][^\W\d_]*)
-第1组:俄语字母,后跟任意0+个字母\s+
-超过1个空格(?:[кК]рай|[оО]бл(?:асть)?)
-Край
,край
,область
,Область
,обл
,Обл
|
-或\b[рР]есп(?:ублика)?\s+([А-Яа-яёЁ][^\W\d_]*)
:
\b
-单词边界[рР]есп(?:ублика)?
-Республика
/ Респ
有变化\s+
-超过1个空格([А-Яа-яёЁ][^\W\d_]*)
-第1组:俄语字母,后跟任意0+个字母|
-或([мМ]осква|[сС]анкт-Петербург)
-第3组:Москва
或Санкт-Петербург
。 ["".join(x) for x in res]
列表理解用于将空值放入返回的元组列表中。