2016-09-30 22 views
0

私は、ユーザーからのファイルパスを取得し、ファイルパスがa)実際にはファイルを開く正当なファイルパスであることを確認するブロックを作成しようとしています。 .txtファイルの最初と最後の行、このパターンフィット:それは今あるのでPythonの正規表現がパターンと一致しない

-53.750 120.900 49.805

を、私が使用しているコードは、パターンマッチングではなく、任意のファイルを受け入れています。誰もが希望のフィルタを得るためにコードのどの部分を調整する必要があるか知っていますか?私は何かが明らかに欠けているように感じる。

while True: 
    try: 
     fileInput = input("What is the file path?: ") 
     openedInput = open(fileInput, 'r') 
     inputList = [] 
     for line in openedInput: 
      inputList.append(line) 
     firstLine = inputList[0] 
     lastLine = inputList[-1] 
     print(firstLine) 
     print(lastLine) 

     if not re.match('.[0-9]+.[0-9]+\s.[0-9]+.[0-9]+\s[0-9]+.[0-9]+',firstLine) and re.match('.[0-9]+.[0-9]+\s.[0-9]+.[0-9]+\s[0-9]+.[0-9]+',lastLine): 
      print("The data file must be in XYZ format, please submit a usable file: ") 
      continue 
     break 
    except: 
     print("That file path was not valid, try again") 
+1

'^ [+ - ] [0-9] + \ [0-9] {3} \ S?[+ - ]?[0-9] + [0-9] {3} \ s [+ - ]?[0-9] + \。[0-9] {3} $ 'は、あなたがやっていることに対してより良い正規表現に見えます。 – Efferalgan

+0

これはありがたいです – McLeodx

+0

http://www.regular-expressions.info/dot.htmlの最後の2番目の段落を確認してください。「ドットを控えめに使用する」 – fabianegli

答えて

1

あなたは否定の問題があります。あなたのコードが現在行っていることは、最初の行が一致せず最後の行が一致する場合にのみエラーメッセージを出力することです。

それはif not (re.match(regex,firstLine) and re.match(regex,lastLine)):で正常に動作し、又はif not re.match(regex,firstLine) or not re.match(regex,lastLine):

+0

しかし、私は一致するには両方の行が必要です。実際には、たとえfirstLineだけでこの正規表現を使用しても(lastLineについて心配することなく)、それでも一致しません。問題が何であるかのアイデアがあればいい – McLeodx

-1

をあなたは \ を追加する必要があります。

これは私がしようとしているものです。あなたの正規表現で。 このように:[0-9] + \。 [0-9]

希望、歓声。

関連する問題