2017-06-22 5 views
0

に検証していますリスト値は、入力ファイルの下のpython

info:pens-10-books-10,pens-10-books-20 

私は以下のようにPythonの辞書を使用して、この入力ファイルを読んでいます。

d = {} 
with open('inputfile.txt') as f: 
    for line in f: 
    if ":" not in line: 
     continue 
    key, value = line.strip().split(":", 1) 
    d[key] = value 
for key, value in d.iteritems(): 
    if key == 'info': 
     goods = value.split(",") 

ここでは、提供されている入力を検証するためのヘルプが必要です。商品はリストとして宣言されていますので、リストの値を検証する必要があります。

最初のオクテットはアルファベット、2番目のオクテットは数字、3番目のオクテットはアルファベット、4番目のオクテットは数字でなければなりません。 4オクテット以上が有効な入力でない場合以下に例があり

pens-10-books-10 --input valid 
apples-1-cakes-10 --input valid 
10-aplpes-10cakes --not valid input (as number contains at first octet) 
pens-10-books-20-apples-10 -- not valid input (more than 4 octets) 
あなたの入力があなたのパターンと一致することを検証する正規表現を使用することができます
+0

regexソリューションのみをお探しですか? – 0p3n5ourcE

+1

@ open-sourceおそらくそうではありませんが、正規表現はここで一番簡単なオプションのようです。 –

答えて

0

>>> import re 
>>> 
>>> def validate(string): 
     if re.match(r'^[a-zA-Z]+\-\d+\-[a-zA-Z]+\-\d+$', string): 
      return True 
     return False 

>>> validate('pens-10-books-10') 
True 
>>> validate('apples-1-cakes-10') 
True 
>>> validate('10-aplpes-10cakes') 
False 
>>> validate('pens-10-books-20-apples-10') 
False 
>>> 

あなたgoodsリストでこれを使用するには、各要素のテストとあれば表示を反復処理することができます有効です:

>>> goods = ['pens-10-books-10', 'apples-1-cakes-10', 
     '10-aplpes-10cakes', 'pens-10-books-20-apples-10'] 
>>> 
>>> for string in goods: 
    print(validate(string)) 


True 
True 
False 
False 
>>> 
関連する問題