python中的正则表达式,带有变量字符串

时间:2015-11-11 19:47:51

标签: python regex

我有这个人。 python中的字符串:

Vladimir_SW_crop_mask_ERA.hdr
Ust_Ordynskiy_Buryatskiy_AO_SW_crop_mask_ERA.hdr
Ingush_WW_crop_mask.dat

我想解析这些字符串:

  1. 获取可以是SW或WW的作物类型

  2. 获取区域名称,即_SW或_WW之前的文本

  3. 我正在使用str.split('_')[0]来获取区域名称,但在Ust_Ordynskiy_Buryatskiy_AO_SW_crop_mask_ERA.hdr的情况下失败,其中区域名称为Ust_Ordynskiy_Buryatskiy_AO

2 个答案:

答案 0 :(得分:2)

您可以rpartitionSqlFiddleDemo执行此操作:

>>> s = 'Vladimir_SW_crop_mask_ERA.hdr'
>>> s.partition('_crop')[0].rpartition('_')[::2]
('Vladimir', 'SW')
>>> s = 'Ust_Ordynskiy_Buryatskiy_AO_SW_crop_mask_ERA.hdr'
>>> s.partition('_crop')[0].rpartition('_')[::2]
('Ust_Ordynskiy_Buryatskiy_AO', 'SW')

答案 1 :(得分:1)

以下正则表达式应该有效:

(.*)_(SW|WW)

将所有内容与下划线匹配,后跟SWWW,并将其放在第一个匹配组和第二组中的以下SWWW中:

import re

strs = ["Vladimir_SW_crop_mask_ERA.hdr",
        "Ust_Ordynskiy_Buryatskiy_AO_SW_crop_mask_ERA.hdr",
        "Ingush_WW_crop_mask.dat"]

for s in strs:
    print(re.match("(.*)_(SW|WW)", s).groups())

结果:

('Vladimir', 'SW')
('Ust_Ordynskiy_Buryatskiy_AO', 'SW')
('Ingush', 'WW')