проверить, соответствует ли строка первым n символам регулярного выражения - PullRequest
0 голосов
/ 23 октября 2019

У меня есть сайт на Python, построенный в Django, где пользователь будет загружать файлы, которые они могут иметь или не иметь разрешения на добавление. Разрешения создаются с помощью ряда шаблонов регулярных выражений (их более 1000). В какой-то момент на моем сайте у меня есть место, где пользователи могут просматривать свои разрешения (используя поисковый фильтр и список). Однако то, что я хочу сделать, - это если пользователь вводит строку и строка соответствует любой части каждого регулярного выражения. Я хочу это в списке.

Сейчас у меня есть if(filter.match(pattern)) { //add pattern to list } Я также пытался искать вместо поиска.

Пример того, что я ищу:

Если у меня есть список регулярных выраженийпаттерны:

^(12345678)\.(txt)$
^(qwertyuiop)\.(txt)$
^(qwerty)\.(txt)$
^(23456)\.(txt)$

, если пользователь введет qwert, в списке будут показаны ^(qwertyuiop)\.(txt)$ и ^(qwerty)\.(txt)$, тогда как если пользователь введет qwertyu, в списке будет отображаться только ^(qwertyuiop)\.(txt)$. Точно так же, если пользователь введет 234, в списке отобразятся ^(12345678)\.(txt)$ и ^(23456)\.(txt)$, но если пользователь введет 1, в списке отобразится только ^(12345678)\.(txt)$.

Возможно ли это сделать? Если да, то как мне это сделать?

Спасибо за помощь!

1 Ответ

0 голосов
/ 23 октября 2019

re.search должно работать для этого. Судя по всему, вы не слишком требовательны к пользователям, вводящим произвольные строки, которые могут привести к сбою вашего сервера. Если это так, вы можете просто сделать это.

import re

patterns = [
    r"^(12345678)\.(txt)$",
    r"^(qwertyuiop)\.(txt)$",
    r"^(qwerty)\.(txt)$",
    r"^(23456)\.(txt)$",
]

filter = re.compile("qwert")
filtered_patterns = [p for p in patterns if filter.search(p)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...