Python 2.7 Реализация токенов в Regex не работает

Я создал регулярное выражение для сопоставления токенов на немецком text который имеет тип string,

Мое регулярное выражение работает, как и ожидалось, используя https://regex101.com/. Вот ссылка на мое регулярное выражение с примером предложения: Мой регулярное выражение + пример на regex101.com

Поэтому я реализовал это в python 2.7 как это:

GERMAN_TOKENIZER = r'''(?x) # set flag to allow verbose regex
([A-ZÄÖÜ]\.)+  # abbrevations including ÄÖÜ
|\d+([.,]\d+)?([€$%])? # numbers, allowing commas as seperators and € as currency
|[\wäöü]+ # matches normal words
|\.\.\. # ellipsis
|[][.,;\"'?():-_'!] # matches special characters including !
'''

def tokenize_german_text(text):
    '''
        Takes a text of type string and 
        tokenizes the text
    '''
    matchObject = re.findall(GERMAN_TOKENIZER, text)
    pass

tokenize_german_text(u'Das ist ein Deutscher Text! Er enthält auch Währungen, 10€')

Результат:

результат Когда я отлаживал это, я обнаружил, что matchObject это только список, содержащий 11 записей с пустыми символами. Почему это не работает, как ожидалось, и как я могу это исправить?

1 ответ

Решение

re.findall() собирает только совпадения в группах захвата (если в вашем регулярном выражении нет групп захвата, и в этом случае он фиксирует каждое совпадение).

Таким образом, ваше регулярное выражение совпадает несколько раз, но каждый раз, когда совпадает ни одна группа захвата. Удалите группы захвата, и вы увидите результаты. Кроме того, поместите - в конце класса символов, если вы на самом деле не хотите соответствовать диапазон символов между : а также _ (но не - сам):

GERMAN_TOKENIZER = r'''(?x) # set flag to allow verbose regex
(?:[A-ZÄÖÜ]\.)+  # abbrevations including ÄÖÜ
|\d+(?:[.,]\d+)?[€$%]? # numbers, allowing commas as seperators and € as currency
|[\wäöü]+ # matches normal words
|\.\.\. # ellipsis
|[][.,;\"'?():_'!-] # matches special characters including !
'''

Результат:

['Das', 'ist', 'ein', 'Deutscher', 'Text', '!', 'Er', 'enthält', 'auch', 'Währungen', ',', '10€']
Другие вопросы по тегам