Regex, чтобы найти N символов между подчеркиванием и точкой - PullRequest
1 голос
/ 20 апреля 2020

У меня есть имя файла с такими номерами, как test_20200331_2020041612345678.csv .

Так что я просто хочу прочитать только первые 8 символов из числа между последним подчеркиванием и .csv, используя регулярное выражение. Например: из имени файла test_20200331_ 20200416 12345678.csv -> я хочу только чтение 20200416 с использованием регулярных выражений.

пробное регулярное выражение: (?<=_)(\d+)(?=\.)

Но он возвращает полное число между подчеркиванием и точкой, т. Е. 2020041612345678

Кроме того, при использовании квантификатора типа (?<=_)(\d{8})(?=\.) он не совпадает ни с одной строкой

1 Ответ

1 голос
/ 20 апреля 2020

(?<=_)(\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 
...