Я думаю, вам не понадобится ленивый модификатор ?
в конце шаблона регулярных выражений.* Ленивый модификатор ?
, который вы там поместили, может на самом деле производить больше шума, чем захват нужных данных
РЕДАКТИРОВАТЬ ПРИМЕЧАНИЕ: шаблон .+:.+
, который я вводил в предыдущих изменениях, был неправильным или даже неправильным.плохое регулярное выражение для захвата желаемого шаблона.Пожалуйста, используйте шаблон \d+:\d+
вместо.Однако я оставляю это так, потому что это все еще может решить проблему OP, используя другой обходной путь.
Пока ваши данные не искажены или содержат шум и аккуратно разделены пробелами, я думаю, что '.+:.+'
достаточночтобы найти ваш index:count
формат.Вероятно, лучший способ - использовать \d+:\d+
, поскольку вы знаете, что по крайней мере один digit
отделен :
, а за ним следует другой digit
.
Вот хорошие ссылки regexr и regex101 для лучшего проектирования / визуализации шаблона регулярных выражений.
Если вы используете шаблон .+:.+
, он вернет вам строку целиком, так как соответствует строке каквсе.Вам необходимо предварительно обработать результат, так как re.findall
возвращает list
, в этом примере он возвращает только 1 элемент.
In [ ]: string="358:6 1260:2 1533:7 1548:292 1550:48 1561:3 1564:186"
...: values=[v for v in re.findall('.+:.+', string)]
...: print(values)
['358:6 1260:2 1533:7 1548:292 1550:48 1561:3 1564:186']
Поскольку он возвращает список только с одним элементом, вы можете использовать pop()
, чтобы извлечь единственный элемент str
и распечатать его с помощью функции str
split()
.
In [ ]: print(values.pop().split())
['358:6', '1260:2', '1533:7', '1548:292', '1550:48', '1561:3', '1564:186']
Если вы используете шаблон \d+:\d+
, он сразу вернет вам красиво разделенный список, поскольку он правильно их найдет.Поэтому вы можете напрямую напечатать его значение.
In [ ]: string="358:6 1260:2 1533:7 1548:292 1550:48 1561:3 1564:186"
...: values=[v for v in re.findall('\d+:\d+', string)]
...: print(values)
['358:6', '1260:2', '1533:7', '1548:292', '1550:48', '1561:3', '1564:186']
Наконец, вы можете красиво распечатать результат с помощью встроенного форматирования строки . Отказ от ответственности: Мне не принадлежит этот веб-сайт, я просто нашел его полезным для меня, начинающего:)
In [ ]: for s in values:
...: index, count = s.split(":")
...: print("Index: {:>8} Count: {:>8}".format(index, count))
...:
Index: 358 Count: 6
Index: 1260 Count: 2
Index: 1533 Count: 7
Index: 1548 Count: 292
Index: 1550 Count: 48
Index: 1561 Count: 3
Index: 1564 Count: 186