我有以下显示此模式的文件名:
000014_L_20111007T084734-20111008T023142.txt
000014_U_20111007T084734-20111008T023142.txt
...
我想在第二个下划线'_'
之后和'.txt'
之前提取中间的两个时间戳部分。所以我使用了以下Python正则表达式字符串拆分:
time_info = re.split('^[0-9]+_[LU]_|-|\.txt$', f)
但是这在返回的列表中给了我两个额外的空字符串:
time_info=['', '20111007T084734', '20111008T023142', '']
我如何只获得两个时间戳信息?即我想:
time_info=['20111007T084734', '20111008T023142']
不要使用re.split()
,使用正则表达式groups()
/ Match
对象的SRE_Match
方法。
>>> f = '000014_L_20111007T084734-20111008T023142.txt'
>>> time_info = re.search(r'[LU]_(\w+)-(\w+)\.', f).groups()
>>> time_info
('20111007T084734', '20111008T023142')
您甚至可以命名捕获组并在dict中检索它们,尽管您使用groupdict()
而不是groups()
。 (这种情况的正则表达式模式类似于r'[LU]_(?P<groupA>\w+)-(?P<groupB>\w+)\.'
)
我不是Python专家,但也许你可以从列表中删除空字符串?
str_list = re.split('^[0-9]+_[LU]_|-|\.txt$', f)
time_info = filter(None, str_list)
如果时间戳总是在第二个_
之后,那么你可以使用str.split
和str.strip
:
>>> strs = "000014_L_20111007T084734-20111008T023142.txt"
>>> strs.strip(".txt").split("_",2)[-1].split("-")
['20111007T084734', '20111008T023142']
>>> f='000014_L_20111007T084734-20111008T023142.txt'
>>> f[10:-4].split('-')
['0111007T084734', '20111008T023142']
或者,更一般:
>>> f[f.rfind('_')+1:-4].split('-')
['20111007T084734', '20111008T023142']