Regex:匹配下划线和句号之间的所有字符



我有一组文件名,我需要从中提取它们的日期。文件名如下所示:

['1 120836_1_20210101.csv',
'1 120836_1_20210108.csv',
'1 120836_20210101.csv',
'1 120836_20210108.csv',
'10 120836_1_20210312.csv',
'10 120836_20210312.csv',
'11 120836_1_20210319.csv',
'11 120836_20210319.csv',
'12 120836_1_20210326.csv',
...
]

作为一个例子,我需要从上面列表的第一项中提取20210101

这是我的代码,但它不工作-我不完全熟悉正则表达式。

import re
dates = []
for file in files:
dates.extend(re.findall("(?<=_)d{}(?=d*.)", file))

你说得还不错,但还是有一些问题:

  • 您通过.findall的结果扩展dates,但您只期望找到一个并且正在构建所有dates,因此在列表推导
  • 中使用re.search会简单得多
  • 你的正则表达式有一些不必要的复杂性(和一些bug)

这是你想要的:

import re
files = [
'1 120836_1_20210101.csv',
'1 120836_1_20210108.csv',
'1 120836_20210101.csv',
'1 120836_20210108.csv',
'10 120836_1_20210312.csv',
'10 120836_20210312.csv',
'11 120836_1_20210319.csv',
'11 120836_20210319.csv',
'12 120836_1_20210326.csv'
]
dates = [re.search(r"(?<=_)d+(?=.)", fn).group(0) for fn in files]
print(dates)

输出:

['20210101', '20210108', '20210101', '20210108', '20210312', '20210312', '20210319', '20210319', '20210326']

继续查找下划线,并将前面的查找更改为查找句号。它只匹配两个数字之间的所有数字(至少一个,带+)。

注意r字符串前避免不得不双正则表达式中的反斜杠,d反斜杠和.仍然需要显示数字和文字的时期。

最新更新