Понимание списка с несколькими регулярными выражениями с Python - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь добавить несколько регулярных выражений в одно «Понимание списка», из того, что я прочитал в Интернете, представляется возможным использование нескольких операторов else, хотя я не могу заставить его работать:

def normalise(token):
    print(["NUM" if token.isdigit() 
    else "Nth" if token in "[\d]+(st|nd|rd|th)" 
    else token for token in token])

normalise(["Within","5","minutes",",","the", "1st", "and",
"2nd", "placed", "runners", "lapped", "the", "5th","."])  

То, что я пытаюсь сделать, это изменить числа с NUM и токены, представляющие место (1, 2, 3 и т. Д.), Которые должны быть заменены на Nth.Все остальные токены не изменены.Первое регулярное выражение isdigit () работает совершенно нормально, хотя я не уверен, как успешно вставить второе, оно просто игнорируется.Если это возможно с 2 регулярными выражениями, то это означает, что возможно с таким количеством регулярных выражений, сколько я хочу?

1 Ответ

0 голосов
/ 24 ноября 2018

Вы не используете регулярное выражение правильно;Вы проверяете, находится ли token в строке регулярного выражения, а не совпадает ли регулярное выражение с чем-либо в token.Вы можете использовать re.match для проверки вашего регулярного выражения в токене:

import re

def normalise(token):
    print(["NUM" if token.isdigit() 
    else "Nth" if re.match(r'\d+(st|nd|rd|th)$', token)
    else token for token in token])

normalise(["Within","5","minutes",",","the", "1st", "and",
           "2nd", "placed", "runners", "lapped", "the", "5th","."])

Выход

['Within', 'NUM', 'minutes', ',', 'the', 'Nth', 'and', 'Nth', 'placed',
 'runners', 'lapped', 'the', 'Nth', '.']
...