Python, re, найти по шаблону

Рейтинг: 0Ответов: 3Опубликовано: 21.06.2023

Имеется строка 'model1_001234.csv'. С помощью модуля re стараюсь получить значение int 1234.

re.match(r'\d+', 'model1_001234.csv') почему то выдает None, не понимаю почему. Но это все равно не верный подход, потому что перед '_001234' стоит еще '1', а это число не нужно.

В итоге хочу в re прописать такую логику - 'ищи любое количество (но не менее одной) цифр после знака _'. Не понимаю как. Помогите пожалуйста, нуб с re.

Ответы

▲ 0Принят

В вашем случае сработает такой код:

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]
▲ 3

Используйте группы:

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]
▲ 0
import re
txt = 'model1_001234.csv'

print(
    re.search(r'(?<=_)(?:0+)?(\d+)(?=\.)', txt).group(1)
)