在 Python 中,如何使用正则表达式过滤 Twitch API 的 WHISPER 命令中的用户和消息?
In Python, how can I filter just the user and message in Twitch API's WHISPER command using regex?
我在主聊天中为 PRIVMSG 运行良好,但是 Twitch 的 WHISPER 命令让我有点抓狂 - 它包含大量额外信息。
例如,对于 PRIVMSG,我有这个工作:
CHAT_MSG=re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
但是,WHISPER returns 这个:
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 returns 这个:
teonnyn!teonnyn@teonnyn.tmi.twitch.tv PRIVMSG #blastweb :Hello Bot
PRIVMSG - public 连接,使用它来解析来自 public:
的聊天
username = re.search(r"\w+", channelResponse).group(0)
message = CHAT_MSG.sub("", channelResponse)
print(username + ": " + message)
在 WHISPER 中也是如此,只是 returns 完整的 "badges+" 块 API 信息。
解析所有额外信息并仅获取 WHISPER 的用户名和消息的最佳方法是什么?
我最终只是想达到:teonnyn: Hello Bot
以下正则表达式 returns 两个匹配项 - 用户名和消息:
user-type=\s+:(\w+)!.*:([\S\s]+)
这里正在工作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')]
您的字符串是分隔符,请尝试利用它作为您的优势:
>>> bits = s.split(':')
>>> bits[2],bits[3]
('teonnyn!teonnyn@teonnyn.tmi.twitch.tv WHISPER blastweb ', 'Hello Bot')
我在主聊天中为 PRIVMSG 运行良好,但是 Twitch 的 WHISPER 命令让我有点抓狂 - 它包含大量额外信息。
例如,对于 PRIVMSG,我有这个工作:
CHAT_MSG=re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
但是,WHISPER returns 这个:
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 returns 这个:
teonnyn!teonnyn@teonnyn.tmi.twitch.tv PRIVMSG #blastweb :Hello Bot
PRIVMSG - public 连接,使用它来解析来自 public:
的聊天 username = re.search(r"\w+", channelResponse).group(0)
message = CHAT_MSG.sub("", channelResponse)
print(username + ": " + message)
在 WHISPER 中也是如此,只是 returns 完整的 "badges+" 块 API 信息。 解析所有额外信息并仅获取 WHISPER 的用户名和消息的最佳方法是什么?
我最终只是想达到:teonnyn: Hello Bot
以下正则表达式 returns 两个匹配项 - 用户名和消息:
user-type=\s+:(\w+)!.*:([\S\s]+)
这里正在工作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')]
您的字符串是分隔符,请尝试利用它作为您的优势:
>>> bits = s.split(':')
>>> bits[2],bits[3]
('teonnyn!teonnyn@teonnyn.tmi.twitch.tv WHISPER blastweb ', 'Hello Bot')