Python, re, найти по шаблону
Имеется строка 'model1_001234.csv'. С помощью модуля re стараюсь получить значение int 1234.
re.match(r'\d+', 'model1_001234.csv') почему то выдает None, не понимаю почему. Но это все равно не верный подход, потому что перед '_001234' стоит еще '1', а это число не нужно.
В итоге хочу в re прописать такую логику - 'ищи любое количество (но не менее одной) цифр после знака _'. Не понимаю как. Помогите пожалуйста, нуб с re.
Ответы (3 шт):
Автор решения: gord1402
→ Ссылка
Используйте группы:
import re
# После _ ищем одну или более цифр и цифры добавляем в группу
# чтобы в результате не захватывалось _
regex = r"_(\d+)"
# Сама строка
string = "model1_001234.csv, model1_001244.csv and model1_002234.csv"
# Ищем все вхождения и переводим в int
matches = [int(group) for group in re.findall(regex, string)]
print(matches)
Результат:
[1234, 1244, 2234]
Автор решения: wchistow
→ Ссылка
В вашем случае сработает такой код:
import re
s = 'model1_001234.csv'
r = []
for m in re.finditer(r'_\d+', s): # Ищем все символы `_` и цифры за ним
r.append(int(m.group()[1:])) # Преобразуем часть без `_` в число
print(r)
В списке r здесь оказываются все нужные вам числа.
Этот код выводит:
[1234]
Автор решения: Namerek
→ Ссылка
import re
txt = 'model1_001234.csv'
print(
re.search(r'(?<=_)(?:0+)?(\d+)(?=\.)', txt).group(1)
)