在Python中使用正则表达式匹配列表项
我正在尝试写一个Python脚本,用来显示我安装的nginx上的URL流向。目前,我的脚本正在打开一个叫做'rewrites'的文件,这个文件里有一些正则表达式和位置的列表,内容大概是这样的:
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 个回答
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
我觉得这样做有点不够高效,不过我已经做到了一定程度了。希望这能回答你的问题。上面的代码片段会打印出与整个列表中第二个项目匹配的所有网址。