(?<=_)(\d{8})(?=\.)
не работает, потому что (?=\.)
положительный прогноз требует наличия .
char непосредственно справа от текущего местоположения , то есть сразу после восьмого di git , но между ними может быть больше цифр.
Вы можете добавить \d*
до \.
, чтобы сопоставить любое количество цифр после требуемых 8 цифр, используйте
(?<=_)\d{8}(?=\d*\.)
Или, с группа захвата, вам даже не нужны обходные пути (просто убедитесь, что вы получаете доступ к группе 1, когда совпадение получено):
_(\d{8})\d*\.
См. демонстрационную версию regex
Python демо :
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