LINUX.ORG.RU

История изменений

Исправление theNamelessOne, (текущая версия) :

У меня работает так:

    [a-zа-яёЁ_\-\[\]\\^{}|`]
    [a-zа-яёЁ0-9\-\[\]\\^{}|`]*

Только я забыл про ключ re.IGNORECASE, который нужно добавить к re.compile

Можно также посмотреть в сторону альтернативных реализаций регулярок под питон, поддерживающих Unicode Properties.

UPD: ещё нужно использовать «юникодные» литералы в случае второго питона:

# -*- coding: utf-8 -*-
#!/usr/bin/env python3

import re

irc_pat = re.compile(ur"""
  ^\s*:
  # nickname:
  (?P<nickname>
    [a-zа-яёЁ_\-\[\]\\^{}|`]
    [a-zа-яёЁ0-9\-\[\]\\^{}|`]*
  )
  !~
  # ident:
  (?P<identifier>
    \w+
  )
  @
  # host:
  (?P<hostname>
    \w+
  )
  \ PRIVMSG\      #
  # channel
  (?P<channel>
    \#\w+
  )
  \ : \           #
  # message itself:
  (?P<message>
    .*
  )$
""", re.VERBOSE | re.UNICODE | re.IGNORECASE)

text = u":ник-с-кириллицей-и-Ё!~ident@host PRIVMSG #channel : test message"

match = irc_pat.match(text)

if match:
    print 'nickname is', match.group('nickname')

Исправление theNamelessOne, :

У меня работает так:

    [a-zа-яёЁ_\-\[\]\\^{}|`]
    [a-zа-яёЁ0-9\-\[\]\\^{}|`]*

Только я забыл про ключ re.IGNORECASE, который нужно добавить к re.compile

Можно также посмотреть в сторону альтернативных реализаций регулярок под питон, поддерживающих Unicode Properties.

UPD: ещё нужно использовать «юникодные» литералы в случае второго питона:

# -*- coding: utf-8 -*-
#!/usr/bin/env python3

import re

irc_pat = re.compile(ur"""
  ^\s*:
  # nickname:
  (?P<nickname>
    [a-zа-яёЁ_\-\[\]\\^{}|`]
    [a-zа-яёЁ0-9\-\[\]\\^{}|`]*
  )
  !~
  # ident:
  (?P<identifier>
    \w+
  )
  @
  # host:
  (?P<hostname>
    \w+
  )
  \ PRIVMSG\      #
  # channel
  (?P<channel>
    \#\w+
  )
  \ : \           #
  # message itself:
  (?P<message>
    .*
  )$
""", re.VERBOSE | re.UNICODE | re.IGNORECASE)

text = u":ник-с-кириллицей-и-Ё!~ident@host PRIVMSG #channel : test message"

match = irc_pat.match(text)

if match:
    print 'nickname is', match.group('nickname').encode('utf-8')

Исходная версия theNamelessOne, :

У меня работает так:

    [a-zа-яёЁ_\-\[\]\\^{}|`]
    [a-zа-яёЁ0-9\-\[\]\\^{}|`]*

Только я забыл про ключ re.IGNORECASE, который нужно добавить к re.compile

Можно также посмотреть в сторону альтернативных реализаций регулярок под питон, поддерживающих Unicode Properties.