【发布时间】:2013-07-12 18:29:28
【问题描述】:
所以,我有一个正则表达式模式列表和一个字符串列表,我想做的是在这个字符串列表中说,是否有任何字符串不匹配任何正则表达式。
目前,我正在从两个字典中提取正则表达式,以及正则表达式要匹配的值:
我从两个字典中制作了两个列表,一个是模式,一个是键:
patterns = []
keys = []
for pattern, schema in patternproperties.items():
patterns.append(pattern)
for key, value in value_obj.items():
keys.append(key)
# Now work out if there are any non-matching keys
for key in keys:
matches = 0
for pattern in patterns:
if re.match(pattern, key):
matches += 1
if matches == 0:
print 'Key %s matches no patterns' %(key)
但这似乎非常低效。任何人都可以找到更好的解决方案吗?
【问题讨论】:
-
一个简单的改进是在找到匹配键的正则表达式后跳出循环。
-
您确定要使用
re.match吗? search() vs. match() -
您的
patterns列表完全没用。只需遍历patternproperties字典。 -
类似地:
for pattern, schema in patternproperties.items(): patterns.append(pattern)与patterns = patternproperties.keys()做的事情完全相同,只是不那么明显,更冗长,而且启动速度可能更慢。同样适用于keys。只是value_obj.keys()。而且,正如 Bakuriu 指出的那样,遍历字典与遍历其键是一样的。