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