Python - 正则表达式与字符串不匹配

时间:2014-12-07 14:01:27

标签: python regex

我试图在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', '')

1 个答案:

答案 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>.*?)$

表示懒洋洋地结束比赛。