簡體   English   中英

將正則表達式匹配到Python中的列表項

[英]Matching regex to list items in Python

我正在嘗試編寫一個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]。

但是,我很難想到一種有效的有效方法。

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

我想這有點低效,但我在某種程度上做了。 希望這能回答您的查詢。 上面的代碼段將打印與整個列表中第二個項目匹配的網址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM