如何正确匹配 IRC 上的私人消息?

How can I properly match a private message on IRC?

我正在制作一个 irc 库,我似乎无法仅匹配私人消息,它还匹配版本字符串。

正则表达式

:(?P<from>.*?)!\S+\sPRIVMSG\s(?P<to>.*?)\s:(?P<msg>.+)

版本匹配

VERSION_STRING: :AkaneSenri1!~AkaneSenr@72A6C9FC.264941B0.A6596FAF.IP PRIVMSG AkaneSenri1 :VERSION
MATCHED: AkaneSenri1', u'AkaneSenri1', u'\x01VERSION\x01
PRIVATE_MESSAGE_STRING: :AkaneSenri1!~AkaneSenr@72A6C9FC.264941B0.A6596FAF.IP PRIVMSG AkaneSenri1 :T
MATCHED: (u'AkaneSenri1', u'AkaneSenri1', u'T') # is what I want

我得到的是服务器在您连接时发送的版本字符串。 我需要的是,当用户向机器人发送 PM 时。 (nick/msg)

:(?P<from>.*?)!\S+\sPRIVMSG\s(?P<to>.*?)\s+:(?!VERSION)(?P<msg>.*)$

它正在寻找具有负面前瞻性的 : not followed by VERSION (?!...)

在此处查看:https://regex101.com/r/sQ7eS6/2(单击左侧的单元测试位,然后 运行 两个测试。或将您的行粘贴到主要位)