我有一个数据框,它是其中的一部分
Судебный участок № 24 в Павлоградском судебном районе Омской области
Судебный участок № 4 в Горьковского судебного района Омской области
Судебный участок № 5 в Знаменском судебном районе Омской области
Судебный участок № 19 в Оконешниковском судебном районе Омской области
Судебный участок № 9 в Кормиловском районе Омской области
Судебный участок № 29 в Таврическом судебном районе Омской области
Судебный участок № 30 в Таврическом районе Омской области
Судебный участок № 44 Кировского судебного района в городе Омске
期望输出
Павлоградском судебном районе
Горьковского судебного района
Знаменском судебном районе
Оконешниковском судебном районе
Кормиловском районе
Таврическом судебном районе
Таврическом районе
Кировского судебного района
我尝试使用正则表达式
[А-Я][А-Яа-я-]+\s+[а-я\s]*\s*(?:округа|район(?!а|е|у|ого))
但是它只返回Тверской район
。其他人是空的。
之后,我更改了此表达式并尝试使用
[А-Я][А-Яа-я-]+\s+[а-я\s]*\s*(?:округа|район((?!а|е|у|ого).)*)
例如,它返回数据,但不返回单词的结尾
Горьковского судебного район
代替
Горьковского судебного района
我认为使用?!
可以使用不需要的单词。 (对我而言,不需要的单词结尾)。
我应该如何将此表达式更改为获取欲望输出?
答案 0 :(得分:2)
使用负前瞻,您将使所有район
后跟а
,е
,у
或ого
的匹配都失败。
使用非捕获组。将(?!а|е|у|ого)
替换为(?:а|е|у|ого)
或仅替换[а-яё]*
,以将单词район
的末尾匹配。
整个正则表达式看起来像
r'[А-ЯЁ][А-ЯЁа-яё-]+\s+[а-яё\s]*\s*(?:округа|район[а-яё]*)'
或者,如果您只想将字符串作为整个单词匹配,则使用单词边界:
r'\b[А-ЯЁ][А-ЯЁа-яё-]+\s+[а-яё\s]*\s*(?:округа|район[а-яё]*)\b'
请参见regex demo。
如果要将正则表达式与str.extract
一起使用,则需要使用捕获括号来包装模式:
df['col'].str.extract(r'\b([А-ЯЁ][А-ЯЁа-яё-]+\s+[а-яё\s]*\s*(?:округа|район[а-яё]*))\b')