正则表达式查找下划线和句点之间的 N 个字符

Regex to find N characters between underscore and period

我有一个包含数字的文件名,例如 test_20200331_2020041612345678.csv.

所以我只想使用正则表达式从最后一个下划线和 .csv 之间的数字中读取前 8 个字符。 例如:从文件名 test_20200331_2020041612345678.csv --> 我只想使用正则表达式读取 20200416

正则表达式已尝试:(?<=_)(\d+)(?=\.)

但它返回下划线和句点之间的完整数字,即 2020041612345678

此外,当尝试像 (?<=_)(\d{8})(?=\.) 这样的量词时,它与任何字符串都不匹配

(?<=_)(\d{8})(?=\.) 不起作用,因为 (?=\.) 正向前瞻要求 . 字符 紧邻当前位置 [=31] 的右侧=],即紧跟在第 8 个数字之后,但中间还有更多数字。

您可以在 \. 之前添加 \d* 以匹配所需 8 位数字之后的任意数量的数字,使用

(?<=_)\d{8}(?=\d*\.)

或者,对于捕获组,您甚至不需要环顾四周(只需确保在获得匹配时访问组 1):

_(\d{8})\d*\.

regex demo

Python demo:

import re
s = "test_20200331_2020041612345678.csv"
m = re.search(r"(?<=_)\d{8}(?=\d*\.)", s)
# m = re.search(r"_(\d{8})\d*\.", s) # capturing group approach
if m:
    print(m.group())  # => 20200416
    # print(m.group(1))  # capturing group approach