Как правильно составить регулярное выражение?

Как правильно создать одну регулярку, которая выдернет число. Есть строки:

Коробка с кирпичами 10 шт;
Коробка с кирпичами (10 шт);
Коробка шт с кирпичами 10 шт;
Коробка 10 с кирпичами 10 шт;


То есть можно быть уверенным что паттерн: цифра(пробел)шт.

Ни как не могу составить выражение так, чтобы возращало только число.

regex = re.compile(r'(.+)(?P<volume>\d+)?(\s?шт)?$')
match.group('volume') -> None
  • Вопрос задан
  • 2961 просмотр
Решения вопроса 1
nowm
@nowm
Вообще, «(.+)(?P< volume>\d+)?(\s?шт)?$» чтобы выдернуть число — это перебор. Зачем такое сложное выражение?

m = re.search('(\d+)[\s]?шт', 'Коробка шт с кирпичами 10 шт;')
m.group(1)


(Это моя первая в жизни программа на Python, но я её честно протестил перед тем, как публиковать.)

Edit: более конкретизированная регулярка, которая не реагирует на слова, вроде: «штукатурка», «штанга» и прочие, начинающиеся со «шт»: (\d+)[\s]?шт([^а-яА-я]|$)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rhaport
@rhaport
r = re.compile('(?P<volume>\d+)\sшт([^А-Яа-я]|$)')
r.search("bla bla 10 шт").group("volume")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы