Форум сайта python.su
# coding: utf-8
import re
d = """
test ticket
user1:
* task 1
* task 2
user2:
* vi1
* vi2
"""
f = re.findall('\n(\w+?):(.*?)',d)
print f
[('user1', ''), ('user2', '')]
Офлайн
Выражение .*? выбирает минимально возможное количество любых символов кроме конца строки (если не использовать флаг re.DOTALL). Так как это выражение стоит у вас в конце регэкса, то оно не будет ничего (вообще ничего) выбирать. Кроме того вы не используете флаг re.DOTALL, поэтому конец строки, идущий после “:” ничем у вас не отлавливается и на нем регэкс благополучно обрывается, переходя к следующему “user2:”.
Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
Как исправить этот регэкс, чтоб он работал, я не представляю. Поэтому стоит или как то жестко привязаться к формату строки (выбирать строки, начинающиеся со “*” например) или использовать более простые функции работы со строками. Тем более, что строка не такая уж и сложная, чтобы исползовать регэксы.
Офлайн
немного изменил синтаксис - добавил конечный символ
import re
d = """
test ticket
user1: yes
* task 1
* task 2
:
user2: up
* vi1
* vi2
:
"""
f = re.findall(r'\n(\w+?):(.+?)\n:',d,re.DOTALL)
print f
Офлайн