我有这个人。 python中的字符串:
Vladimir_SW_crop_mask_ERA.hdr
Ust_Ordynskiy_Buryatskiy_AO_SW_crop_mask_ERA.hdr
Ingush_WW_crop_mask.dat
我想解析这些字符串:
获取可以是SW或WW的作物类型
获取区域名称,即_SW或_WW之前的文本
我正在使用str.split('_')[0]来获取区域名称,但在Ust_Ordynskiy_Buryatskiy_AO_SW_crop_mask_ERA.hdr
的情况下失败,其中区域名称为Ust_Ordynskiy_Buryatskiy_AO
答案 0 :(得分:2)
您可以rpartition和SqlFiddleDemo执行此操作:
>>> 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)
将所有内容与下划线匹配,后跟SW
或WW
,并将其放在第一个匹配组和第二组中的以下SW
或WW
中:
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')