Фильтрация списка строк с использованием регулярного выражения - PullRequest
1 голос
/ 26 мая 2020

У меня есть список строк, который выглядит следующим образом:

strlist = [
            'list/category/22',
            'list/category/22561',
            'list/category/3361b',
            'list/category/22?=1512',
            'list/category/216?=591jf1!',
            'list/other/1671',
            'list/1y9jj9/1yj32y',
            'list/category/91121/91251',
            'list/category/0027',
]

Я хочу использовать регулярное выражение для поиска строк в этом списке, которые содержат следующую строку /list/category/, за которой следует целое число любого длина, но это все, после этого он не может содержать никаких букв или символов.

Итак, в моем примере результат должен выглядеть так

list/category/22
list/category/22561
list/category/0027

Я использовал следующий код:

newlist = []
for i in strlist:
    if re.match('list/category/[0-9]+[0-9]',i):
        newlist.append(i)
        print(i)

, но это мой результат:

list/category/22
list/category/22561
list/category/3361b
list/category/22?=1512
list/category/216?=591jf1!
list/category/91121/91251
list/category/0027

Как мне исправить мое регулярное выражение? А также есть способ сделать это в одной строке, используя команду filter или match вместо for l oop?

1 Ответ

2 голосов
/ 26 мая 2020

Вы можете попробовать следующее регулярное выражение:

^list\/category\/\d+$

Объяснение приведенного выше регулярного выражения:

^ - Представляет начало данной тестовой строки.

\d+ - соответствует цифрам, которые встречаются один или несколько раз.

$ - соответствует конец тестовой строки. Это часть вашего регулярного выражения .

Демонстрация вышеуказанного регулярного выражения в здесь.

РЕАЛИЗАЦИЯ В PYTHON

import re
pattern = re.compile(r"^list\/category\/\d+$", re.MULTILINE)
match = pattern.findall("list/category/22\n"
               "list/category/22561\n"
               "list/category/3361b\n"
               "list/category/22?=1512\n"
               "list/category/216?=591jf1!\n"
               "list/other/1671\n"
               "list/1y9jj9/1yj32y\n"
               "list/category/91121/91251\n"
               "list/category/0027") 
print (match)

Вы можете найти пример выполнения вышеуказанной реализации здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...