Я пытаюсь выполнить итерацию по списку строк, сохраняя только те, которые соответствуют шаблону именования, который я указал. Я хочу принять любую запись списка, которая точно соответствует шаблону, отличную от целого числа в поле переменной <SCENARIO>
.Python test, если строка соответствует значению шаблона
Проверка должна быть общей. В частности, структура строки может измениться так, что нет гарантии, что <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 - извините, но regex еще нет. Я знаю, что существует регулярное выражение, но я не знаком с деталями реализации. Я хотел убедиться, что это был подходящий подход, прежде чем зайти слишком далеко. Спасибо, что подтвердили. – Roberto