我想在list元素中声明一个正则表达式为r'tata.xnl。* - dev.1.0',它应该匹配tata.xnl.1.0-dev.1.0
,如何解决这个问题?
productline = '8.H.5'
pl_component_dict = {'8.H.5': [r'tata.xnl.*-dev.1.0','tan.xnl.1.0-dev.1.0'],
'8.H.7':['']
}
component_branch = "tata.xnl.1.0-dev.1.0"
if component_branch in pl_component_dict[productline] :
print "PASS"
else:
print "ERROR:Gerrit on incorrect component"
错误: -
ERROR:Gerrit on incorrect component
答案 0 :(得分:0)
使编译的re
字典值与您的字符串匹配:
import re
productline = '8.H.5'
pattern = re.compile(r'tata.xnl.\d\.\d-dev.1.0')
pl_component_dict = {'8.H.5': pattern}
component_branch = "tata.xnl.1.0-dev.1.0"
if pl_component_dict[productline].match(component_branch):
print "PASS"
else:
print "ERROR:Gerrit on incorrect component"
答案 1 :(得分:0)
将r
添加到字符串不会使其成为正则表达式 - 它使其成为raw string literal。
您需要使用re.compile()
将其编译为正则表达式。
import re
...
for component in pl_component_dict[productline]:
if re.compile(component).match(component_branch):
print "PASS"
break
else: # note that this becomes a for-else, not an if-else clause
print "ERROR:Gerrit on incorrect component"
这个for-else循环负责处理pl_component_dict[productline]
中列表的事件,就像你在这种情况下一样。
答案 2 :(得分:0)
以下是使用re.search
的一种方式:
import re
class ReList:
def __init__(self, thinglist):
self.list = thinglist
def contains(self, thing):
re_list = map( lambda x: re.search( x, thing) , self.list)
if any( re_list):
return True
else:
return False
my_relist = ReList( ['thing0', 'thing[12]'] )
my_relist.contains( 'thing0')
# True
my_relist.contains( 'thing2')
# True
my_relist.contains( 'thing3')
# False
any
语句有效,因为re.search
返回布尔值为True的re.MatchObject
,否则返回None
。