に一致することは、私は形式で日時を考えてみましょうPythonの正規表現、任意の順序
12 September, 2016
September 12, 2016
2016 September, 12
それは
match-1 : 12
match-2 : September
match-3 : 2016
上で与えられた任意のDATEFORMATのために、常に同じ順序で試合を返す必要がありますように私正規表現必要
私は結果を必要とします常に同じ順序で。
に一致することは、私は形式で日時を考えてみましょうPythonの正規表現、任意の順序
12 September, 2016
September 12, 2016
2016 September, 12
それは
match-1 : 12
match-2 : September
match-3 : 2016
上で与えられた任意のDATEFORMATのために、常に同じ順序で試合を返す必要がありますように私正規表現必要
私は結果を必要とします常に同じ順序で。
あなたは、グループの順序を切り替えることはできませんが、あなたのグループに名前を付けることができます。
(r'(?P<day>[\d]{2})(?:\s|,|\?|$)|(?P<month>[a-zA-Z]+)|(?P<year>[\d]{4})')
(?P<day>[\d]{2})(?:\s|,|\?|$)
:マッチ:1日と一致して、l.group("day")
(?P<month>[a-zA-Z]+)
とpythonでアクセスすることができます月には、Pythonでアクセスすることができますl.group("month")
(?P<year>[\d]{4})
:年一致し、l.group("year")
とpythonでアクセスすることができます。例:以下の提案としてグループ名前
import re
data = """
12 September, 2016
September 12, 2016
2016 September, 12
September 17, 2012
17 October, 2015
"""
rgx = re.compile(r'(?P<day>[\d]{2})(?:\s|,|\?|$)|(?P<month>[a-zA-Z]+)|(?P<year>[\d]{4})')
day = ""
month = ""
year = ""
for l in rgx.finditer(data):
if(l.group("day")):
day = l.group("day")
elif(l.group("month")):
month = l.group("month")
elif(l.group("year")):
year = l.group("year")
if(day != "" and month != "" and year != ""):
print "{0} {1} {2}".format(day, month, year)
day = ""
month = ""
year = ""
グループの順序を変更することはできません。あなたは3つのパターンの "または"を実行し、どのグループが何にマッピングされているかを判断するために結果を渡す必要があります。これはかなりシンプルでなければなりません。
は特にあなたの場合は(それを行うための良い方法です既に正規表現が設定されています)が、datetime
モジュールでそれを処理する方法がここにあります。
from datetime import datetime as date
def parse_date(s):
formats = ["%d %B, %Y",
"%B %d, %Y",
"%Y %B, %d"]
for f in formats:
try:
return date.strptime(s, f)
except ValueError:
pass
raise ValueError("Invalid date format!")
arr = ["12 September, 2016",
"September 12, 2016",
"2016 September, 12",
"12/9/2016"]
for s in arr:
dt = parse_date(s)
print(dt.year, dt.strftime("%B"), dt.day)
"""
2016 September 12
2016 September 12
2016 September 12
Traceback (most recent call last):
File "C:/Python33/datetest.py", line 22, in <module>
dt = parse_date(s)
File "C:/Python33/datetest.py", line 19, in parse_date
raise ValueError("Invalid date format!")
ValueError: Invalid date format!
"""
詳細については、datetime documentation pageを参照してください。
データがこれらの3つのフォーマットのいずれかを満たしていない場合には、 'NameError'を取得する危険性があります。現在のものと一致しません... –
良い点、修正! – damjan
クール - 代わりに、[here](https://stackoverflow.com/a/23581184)のような関数でラップすることができます –
おかげで!これは実際に私が望むものです。それは動作します... –