检查字符串是否与正则表达式的前n个字符匹配

时间:2019-10-23 20:13:07

标签: python regex django

我有一个Django内置的python网站,用户将在该网站上上传他们可能会或可能没有添加权限的文件。权限是通过一系列正则表达式模式创建的(超过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 :(得分:0)

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)]