Регулярное выражение, которое не соответствует 0 в начале для каждой группы
- 01 Ded.PASIVIC 05-01-2016.xlsx
- 01 Ded.PASIVIC 15-01-2016.xlsx
- 01 Ded.PASIVIC 10-01-2016.xlsx
- 06 DED. PASIVIC 30-03-2016 (1).xlsx
- 19 DEDUCCION PASIVIC DEL 15-10-2016.xlsx (2)
- 23 DEDUCCION PASIVIC DEL 15-12-2016.xlsx (1)
- 18 APORTE PASIVIC DEL 30-09-2016.xlsx
Я хотел бы получить дату, которая напечатана на названии файлов выше, но без начальных нулей.
Вместо того, чтобы получить всю дату, как я делаю выше, я хочу получить для первого файла 5-1-2016, для второго файла я хочу 15-1-2016, для третьего 10-1-2016 и так далее (Нет ведущих нулей).
Ожидаемый результат должен быть таким:
- 5-1-2016
- 15-1-2016
- 10-1-2016
- 30-3-2016
- 15-10-2016
- 15-12-2016
- 30-9-2016
Я делаю это на питоне.
3 ответа
Можно сопоставить 3 группы, а для первых 2 групп - необязательный ноль с последующим захватом 1 или 2 раза цифры 0?([0-9]{1,2}-)
сопровождаемый чертой.
Вы можете добавить границу слова \b
в начале и в конце.
^.*?\b0?([0-9]{1,2}-)0?([0-9]{1,2}-)([0-9]{4})\b.*$
Тогда вы можете использовать sub и в замене использовать группы захвата:
\1\2\3
import re
regex = r"^.*?\b0?([0-9]{1,2}-)0?([0-9]{1,2}-)([0-9]{4})\b.*$"
test_str = "01 Ded.PASIVIC 05-01-2016.xlsx"
subst = r"\1\2\3"
result = re.sub(regex, subst, test_str, 1)
if result:
print (result) # 5-1-2016
Самым примитивным способом я бы пошел с этим решением:
([1-9]) ([0-9]) - ([0-9] +) - ([0-9] +) | ([0-9]) - ([0-9] +) - ([0-9] +)
Вы можете сделать это в два этапа с re.findall
а также re.sub
:
import re
data = """
01 Ded.PASIVIC 05-01-2016.xlsx
01 Ded.PASIVIC 15-01-2016.xlsx
01 Ded.PASIVIC 10-01-2016.xlsx
06 DED. PASIVIC 30-03-2016 (1).xlsx
19 DEDUCCION PASIVIC DEL 15-10-2016.xlsx (2)
23 DEDUCCION PASIVIC DEL 15-12-2016.xlsx (1)
18 APORTE PASIVIC DEL 30-09-2016.xlsx
"""
matches = re.findall('(?:[0-9]{2}-){2}[0-9]{4}',data)
print(re.sub('0(?=[0-9]-)','',str(matches)))
Печать:
['5-1-2016', '15-1-2016', '10-1-2016', '30-3-2016', '15-10-2016', '15-12-2016', '30-9-2016']