我有数据,看起来像
Respublika Tatarstan, Kazan'
Krasnodar Krai, Krasnodar
Tverskaya region, Tver
期望的输出:
respublika Tatarstan
Krasnodar krai
Tverskaya region
我尝试使用
for addr in df.address.values.tolist():
re.findall(r'(\w+( krai| region))|((?:respublika )\w+)', addr)
但它会返回元组列表,并且在respublika
之后找不到对象。
答案 0 :(得分:0)
您可以使用
import re
rx = r"\b[A-Z]\w*\s+(?:[kK]rai|[rR]egion)|\b[rR]espublika\s+[A-Z]\w*"
s = "Something in Respublika Tatarstan, Kazan\nWhat a Krasnodar Krai, Krasnodar I have seen!\nIn Tverskaya region, Tver, it is not so uncommon."
print(re.findall(rx, s))
我们的想法是匹配region
,Region
,krai
或Krai
之前的任何大写单词,或Respublika
或{{1之后的大写单词}}
发送Python demo。如果您只想匹配字母,请将respublika
替换为\w
。
请参阅regex demo here。
<强>详情
[^\W\d_]
- 字边界\b
- 一个大写的ASCII字母,后跟0 +字的字符[A-Z]\w*
- 1+空格\s+
- (?:[kK]rai|[rR]egion)
,region
,Region
或krai
Krai
- 或|
- 字边界\b
- [rR]espublika
或Respublika
respublika
- 1+空格\s+
- 一个大写的ASCII字母,后跟0 +字的字符