Python正则表达式拆分不包含空字符串

2024-03-28 18:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下文件名显示了这种模式:

000014_L_20111007T084734-20111008T023142.txt
000014_U_20111007T084734-20111008T023142.txt
...

我想提取第二个下划线'_'之后和'.txt'之前的中间两个时间戳部分。所以我使用了下面的Python regex string split:

time_info = re.split('^[0-9]+_[LU]_|-|\.txt$', f)

但这给了我两个额外的空字符串:

time_info=['', '20111007T084734', '20111008T023142', '']

我怎样才能只得到两个时间戳的信息?i、 e.我想要:

time_info=['20111007T084734', '20111008T023142']

Tags: 字符串reinfotxt信息stringtime文件名
3条回答

如果时间戳总是在第二个_之后,则可以使用str.splitstr.strip

>>> strs = "000014_L_20111007T084734-20111008T023142.txt"
>>> strs.strip(".txt").split("_",2)[-1].split("-")
['20111007T084734', '20111008T023142']

我不是Python专家,但也许您可以从列表中删除空字符串?

str_list = re.split('^[0-9]+_[LU]_|-|\.txt$', f)
time_info = filter(None, str_list)

不要使用re.split(),使用regexMatch/SRE_Match对象的groups()方法。

>>> f = '000014_L_20111007T084734-20111008T023142.txt'
>>> time_info = re.search(r'[LU]_(\w+)-(\w+)\.', f).groups()
>>> time_info
('20111007T084734', '20111008T023142')

您甚至可以命名捕获组并在dict中检索它们,尽管您使用的是groupdict(),而不是groups()。(这种情况的regex模式类似于r'[LU]_(?P<groupA>\w+)-(?P<groupB>\w+)\.'

相关问题 更多 >