#python #регулярные_выражения
Помогите пожалуйста написать регулярное выражение на Python 3.6.Есть строки типа: 4 дні тому849 478 переглядів 33 730 переглядів35 хвилин тому 16 037 172 перегляди2 дні тому 14 947 360 переглядів1 тиждень тому 1 тиждень тому1 515 110 переглядів (Порядок может быть именно такой, а вот количество просмотров может меняться) Я пытался использовать нахождение просмотров по регулярному выражению которое находит числа(и то не все), но так оно собирает только первые числа. import re match = re.search('[0-9]+','16 037 172 перегляди2 дні тому') Как можно эту регулярку дополнить,что бы она собирала количество просмотров? Пример выхода во втором примере: 33730
Ответы
Ответ 1
В данной ситуации, как и вцелом, ответ зависит от того, как именно вам нужно вывести информацию. Учитывая моё понимание написанного выше, привожу свой вариант решения самой задачи. Соответственно, дополняю как вы просили ваше регулярное выражение: import re info = ['4 дні тому849 478 переглядів', '33 730 переглядів35 хвилин тому', '16 037 172 перегляди2 дні тому', '14 947 360 переглядів1 тиждень тому', '1 тиждень тому1 515 110 переглядів'] for string in info: match = re.search('([0-9]+\s){2,3}', string) print(match) if match: print('True') else: print('False') Регулярное выражение: ([0-9]+\s){2,3} тут исполнительная часть выражения взята в скобки - сгрупирована [0-9] - совпадение с этим диапазоном (можно заменить на более regexp'сное \d) +- любое количество символов (в нашем случае от одного до трех, т.к. 3 цифры и пробел) \s - любой знак препинания (можно заменить на [ ]) {2,3} - количество повторений Стоит учесть: Устойчивая конструкция сработает на любое цисло в последовательности (например 2151 5188845 112) только с учетом пробела вконце последовательности Будет выдавать ответ на значения выше тысячи (в примере через оформлены тысячи) Может быть любой знак препинания (\n . , ? и т.д.) Командная строка выдает мне следующее: <_sre.SRE_Match object; span=(10, 18), match='849 478 '> True <_sre.SRE_Match object; span=(0, 7), match='33 730 '> True <_sre.SRE_Match object; span=(0, 11), match='16 037 172 '> True <_sre.SRE_Match object; span=(0, 11), match='14 947 360 '> True <_sre.SRE_Match object; span=(14, 24), match='1 515 110 '> True Process returned 0 (0x0) execution time : 0.243 s Press any key to continue . . .Ответ 2
((\d+\s*?)+)\s*перегляд https://ideone.com/MHFngZ import re info = ['4 дні тому849 478 переглядів', '33 730 переглядів35 хвилин тому', '16 037 172 перегляди2 дні тому', '14 947 360 переглядів1 тиждень тому', '1 тиждень тому1 515 110 переглядів'] for s in info: match = re.search('((\d+\s*?)+)\s*перегляд', s, re.IGNORECASE) if match: n = int(re.sub('\s', '', match.group(1))) print(n) 849478 33730 16037172 14947360 1515110
Комментариев нет:
Отправить комментарий