Python:从条件为

时间:2018-02-15 08:15:27

标签: python regex

我有数据,看起来像

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之后找不到对象。

1 个答案:

答案 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))

我们的想法是匹配regionRegionkraiKrai之前的任何大写单词,或Respublika或{{1之后的大写单词}}

发送Python demo。如果您只想匹配字母,请将respublika替换为\w

请参阅regex demo here

<强>详情

  • [^\W\d_] - 字边界
  • \b - 一个大写的ASCII字母,后跟0 +字的字符
  • [A-Z]\w* - 1+空格
  • \s+ - (?:[kK]rai|[rR]egion)regionRegionkrai
  • Krai - 或
  • | - 字边界
  • \b - [rR]espublikaRespublika
  • respublika - 1+空格
  • \s+ - 一个大写的ASCII字母,后跟0 +字的字符