문제

RFC에 따라 Python을 사용하여 IRC 서버에서받은 메시지를 구문 분석하는 가장 좋은 방법은 무엇입니까? 나는 단순히 어떤 종류의 목록/무엇이든 원합니다.

:test!~test@test.com PRIVMSG #channel :Hi!

이것이된다 :

{ "sender" : "test!~test@test.com", "target" : "#channel", "message" : "Hi!" }

등등?

(편집 : IRC 메시지를 구문 분석하고 싶습니다. 일반, privmsg만이 아니라)

도움이 되었습니까?

해결책

Twisted의 구현을보십시오 http://twistedmatrix.com/

불행히도 나는 시간이 없어서 다른 사람이 당신을 위해 여기에 붙여 넣을 수있을 것입니다.

편집하다

글쎄, 나는 돌아 왔고 이상하게도 아무도 그것을 붙여 넣지 않았다.

http://twistedmatrix.com/trac/browser/trunk/twisted/words/protocols/irc.py#54

def parsemsg(s):
    """Breaks a message from an IRC server into its prefix, command, and arguments.
    """
    prefix = ''
    trailing = []
    if not s:
       raise IRCBadMessage("Empty line.")
    if s[0] == ':':
        prefix, s = s[1:].split(' ', 1)
    if s.find(' :') != -1:
        s, trailing = s.split(' :', 1)
        args = s.split()
        args.append(trailing)
    else:
        args = s.split()
    command = args.pop(0)
    return prefix, command, args

parsemsg(":test!~test@test.com PRIVMSG #channel :Hi!")
# ('test!~test@test.com', 'PRIVMSG', ['#channel', 'Hi!']) 

이 기능은 IRC RFC에 설명 된 EBNF를 밀접하게 따릅니다.

다른 팁

형식이 항상 이와 같은 경우 간단한 목록 이해력으로 수행 할 수 있습니다.

keys = ['sender', 'type', 'target', 'message']
s = ":test!~test@test.com PRIVMSG #channel :Hi!"
dict((key, value.lstrip(':')) for key, value in zip(keys, s.split()))

결과:

{'message': 'Hi!', 'type': 'PRIVMSG', 'sender': 'test!~test@test.com', 'target': '#channel'}

IRC 메시지를 일반적으로 구문 분석하고 싶습니까? 그러나 나는 그것에 대한 구현이 있습니다.

def parse_message(s):
    prefix   = ''
    trailing = ''
    if s.startswith(':'):
        prefix, s = s[1:].split(' ', 1)
    if ' :' in s:
        s, trailing = s.split(' :', 1)
    args = s.split()
    return prefix, args.pop(0), args, trailing

저수준 해킹을 계속하고 싶다면 두 번째로 알려지지 않은 답변을 두 번째로, 먼저 최근에 발표 된 것을 살펴 봐야한다고 생각합니다. 초년병 이것은 트위스트 위에있는 좋은 요청 구문 분석 레이어입니다. 응답 등을 생성 할 수있는 Django ORM을 사용할 수 있다는 이점이있는 IRC 메시지를 처리하기 위해 Django URL 디스패치와 유사한 것을 사용할 수 있습니다.

나는 그것이 파이썬이 아니라는 것을 알고 있지만,이 문제에 대한 정기적 인 표현식 접근법을 위해서, 당신은 POE :: 필터 :: IRCD, IRC 서버 프로토콜을 처리하는 (참조 poe :: 필터 :: irc :: compat 클라이언트 프로토콜 추가) Perl 's에 대한 구문 분석 poe :: component :: irc 뼈대.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top