Я пытаюсь получить последнее соответствие регулярному выражению в сообщении, передаваемом сокетом, но оно возвращает пустое.Python - Regex не соответствует строке
>>> msg = ':morgan.freenode.net 353 MechaBot = #xshellz :MechaBot ITechGeek zubuntu whitesn JarodRo SpeedFuse st3v0 anyx danielhyuuga1 AussieKid92 JeDa Failed Guest83885 RiXtEr xryz D-Boy warsoul buggiz rawwBNC MagixZ fedai Sunborn oatgarum dune SamUt Pythonista_ +xinfo madmattco BuGy azuan DarianC stupidpioneers AnTi_MTtr JeDaYoshi|Away PaoLo- StephenS chriscollins Rashk0 morbid1 Lord255 victorix [DS]Matej EvilSoul `|` united Scrawn avira ssnova munsterman Logxen niko gorut Jactive|OFF grauwulf b0lt saapete'
>>> r = re.compile(r"(?P<host>.*?) (?P<code>.*?) (?P<name>.*?) = (?P<msg>.*?)", re.IGNORECASE)
>>> r.search(msg).groups()
(':morgan.freenode.net', '353', 'MechaBot', '')
Хорошо, что работает. Не могли бы вы объяснить, почему '?' Не нужно, пожалуйста? –
@ DanielHyuuga: Если вы сделаете последнюю группу неживой, она будет соответствовать пустой строке. Regex не пытается использовать всю входную строку, как вы, вероятно, думаете. Как только шаблон полностью совпадает, все кончено. –
@ DanielHyuuga см. Отредактированный ответ – vks