我正在嘗試迭代字符串列表,只保留與我指定的命名模板相匹配的字符串。我想接受任何與模板完全匹配的列表條目,除了在變量<SCENARIO>
字段中有一個整數。Python測試字符串是否與模板值相匹配
該檢查需要一般。具體來說,字符串結構可能會發生變化,因此不能保證<SCENARIO>
總是顯示在字符X處(例如,使用列表解析)。
下面的代碼顯示了一種使用split
的方法,但必須有更好的方法來進行此字符串比較。我能在這裏使用正則表達式嗎?
template = 'name_is_here_<SCENARIO>_20131204.txt'
testList = ['name_is_here_100_20131204.txt', # should accept
'name_is_here_100_20131204.txt.NEW', # should reject
'other_name.txt'] # should reject
acceptList = []
for name in testList:
print name
acceptFlag = True
splitTemplate = template.split('_')
splitName = name.split('_')
# if lengths do not match, name cannot possibly match template
if len(splitTemplate) == len(splitName):
print zip(splitTemplate, splitName)
# compare records in the split
for t, n in zip(splitTemplate, splitName):
if t!=n and not t=='<SCENARIO>':
#reject if any of the "other" fields are not identical
#(would also check that '<SCENARIO>' field is numeric - not shown here)
print 'reject: ' + name
acceptFlag = False
else:
acceptFlag = False
# keep name if it passed checks
if acceptFlag == True:
acceptList.append(name)
print acceptList
# correctly prints --> ['name_is_here_100_20131204.txt']
是的,人們可以在這裏使用正則表達式。你到目前爲止有一個正則表達式嗎? –
@SimeonVisser - 對不起,還沒有正則表達式。我知道存在正則表達式,但我不熟悉實現細節。我想確保這是一個有價值的方法,然後才能做得太過分。感謝您的確認。 – Roberto