我试图在socket上广播的消息上获得最后的正则表达式匹配,但它返回空白。
>>> 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', '')
答案 0 :(得分:1)
(?P<host>.*?) (?P<code>.*?) (?P<name>.*?) = (?P<msg>.*)
试试这个。这很有效。看看演示。你的代码使用.*?
,你可以说匹配尽可能少的字符。所以当你以前使用.*? <space>
时,它匹配到它遇到的第一个空格,在最后你没有指定anythng。因为它在懒惰模式下不匹配任何东西。
https://regex101.com/r/aQ3zJ3/1
您也可以使用
(?P<host>.*?) (?P<code>.*?) (?P<name>.*?) = (?P<msg>.*?)$
表示懒洋洋地结束比赛。