匹配正则表达式以列出Python中的项目

时间:2014-03-11 18:07:23

标签: python regex python-2.7 nginx

我正在尝试编写一个python脚本,显示我安装的nginx上的URL流。所以我现在让我的脚本打开我的'重写'文件,其中包含正则表达式和位置列表,如下所示:

rewritei ^/ungrad/info.cfm$ /ungrad/info/ permanent;

所以我目前有python做的是读取文件,修剪第一个和最后一个单词(rewritei和premanent;),它只留下一个列表:

[
    ['^/ungrad/info.cfm$', '/ungrad/info'],
    ['^/admiss/testing.cfm$', '/admiss/testing'],
    ['^/ungrad/testing/$', '/ungrad/info.cfm']
]

这导致第一个元素是被观看的URL,第二个元素是重定向到的URL。我现在要做的是获取每个第一个元素,并在整个列表中运行正则表达式,并检查它是否与任何第二个元素匹配。

通过上面的例子,[0] [0]将匹配[2] [1]。

然而,我无法想出一个好的,有效的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

import re

a = [
    ['^/ungrad/info.cfm$', '/ungrad/info'],
    ['^/admiss/testing.cfm$', '/admiss/testing'],
    ['^/ungrad/testing/$', '/ungrad/info.cfm']
]



def matchingfun(b):
    for list1 in a: # iterating the main list
        for reglist in list1: # iterating the inner lists
            count  = 0
            matchedurl = []
            for innerlist in reglist[:1]: # iterating the inner list items
                c = b.match(innerlist) # matching the regx
                if c:
                    count = count+1
                    if count > 0:
                        matchedurl.append(reglist)
    return matchedurl

result1 = []
for list1 in a:
    for reglist in list1:
        b = re.compile(reglist[0])
        result = matchingfun(b)
        result1.extend(result)

bs = list(set(result1))

print "matched url is", bs

我猜这有点不高效,但我已经做了一些程度的努力。希望这能回答您的疑问。上面的代码段打印出与整个列表中第二项匹配的网址。