在Python中,如何使用正则表达式在Twitch API的WHISPER命令中仅过滤用户和消息?

时间:2016-05-09 04:16:52

标签: python regex twitch

我在主聊天中对PRIVMSG运行良好,但是Twitch的WHISPER命令让我有点疯狂 - 它包含了大量的额外信息。

作为一个例子,对于PRIVMSG,我有这个工作:

 CHAT_MSG=re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")

但是,WHISPER会返回:

badges: @badges=;color=;display-name=;emotes=;message-id=34;thread-id=5575526_123681740;turbo=0;user-id=5575526;user-type= :teonnyn!teonnyn@teonnyn.tmi.twitch.tv WHISPER blastweb :Hello Bot

虽然PRIVMSG返回此信息:

teonnyn!teonnyn@teonnyn.tmi.twitch.tv PRIVMSG #blastweb :Hello Bot

PRIVMSG - 公共连接,使用它来解析公共聊天:

        username = re.search(r"\w+", channelResponse).group(0)
        message = CHAT_MSG.sub("", channelResponse)
        print(username + ": " + message)

WHISPER中的相同内容只返回API信息的完整“徽章+”块。 什么是最好的方法来解析所有额外的信息,并获得WHISPER的用户名和消息?

我最终只想尝试:teonnyn: Hello Bot

2 个答案:

答案 0 :(得分:2)

以下正则表达式返回两个匹配项 - 用户名和消息:

user-type=\s+:(\w+)!.*:([\S\s]+)

REGEX DEMO

这是有效的IDEONE DEMO

>>> import re
>>> s = "badges: @badges=;color=;display-name=;emotes=;message-id=34;thread-id=5575526_123681740;turbo=0;user-id=5575526;user-type= :teonnyn!teonnyn@teonnyn.tmi.twitch.tv WHISPER blastweb :Hello Bot"
>>> re.findall(r'user-type=\s+:(\w+)!.*:([\S\s]+)', s)
[('teonnyn', 'Hello Bot')]

答案 1 :(得分:1)

你的字符串是分隔的,尝试使用它作为你的优势:

>>> bits = s.split(':')
>>> bits[2],bits[3]
('teonnyn!teonnyn@teonnyn.tmi.twitch.tv WHISPER blastweb ', 'Hello Bot')