2017-01-25 9 views
0

"AttributeError: 'NoneType'オブジェクトに 'group'属性がありませんというエラーメッセージが出力されないような出力を取得しようとしています。私はエラーが "なし"である "matchObj"の出力によると信じています。ボトムは私のコードです。エラーを回避する有効な入力(re:matchを使用)

def processCcDtMdyStamp(datestamp): 
    matchObj = re.match(r'^(\d+)/(\d+)/(\d+)\s', datestamp) 
    (month, day, year) = (matchObj.group(1), matchObj.group(2), matchObj.group(3)) 
    return "%s/%s/%s" % (month, day, year) 

if __name__ == '__main__': 
    print(processCcDtMdyStamp(' 1/6/2015 ')) 

'1/6/2015'ではなく有効な入力(日時)はどのようになりますか? ありがとうございます。

+5

'1月6日/ 2015'の周りに空白をトリムし、それが動作するかどうかを確認。しかし、 'datetime.strptime()'を使って文字列をdatetimeにロードしようとするのではなく、なぜ正規表現を使うのでしょうか? – alecxe

+2

またはREから '^'を削除してください。 – DyZ

+1

あるいは '^'の後ろに '\ s *'を追加します(また、末尾に '$ $ 'を追加したい場合は、正規表現内でトリミングするようにしてください)。 – xzoert

答えて

0
  • は、文字列の先頭で一致するようになるため、^は冗長です。また、代わりにre.search()を使用することを検討してください。パターンは文字列の先頭に限定されず、数字とスラッシュを一致させるだけです。
  • あなたの入力は最初にスペースがあり、パターンにはスペースがないので、一致するものは見つかりません。スペースの可能性がある場合は、パターンの先頭と末尾に\s?を使用するか、正規表現を適用する前に空白をトリミングすることを検討してください。

>>> import re 
>>> datestamp = ' 1/6/2015 ' 
>>> matchObj = re.search(r'(\d+)/(\d+)/(\d+)', datestamp) 
>>> matchObj.group(1) 
'1' 
関連する問題