さまざまな稼働時間の文字列を解析し、時間の標準形式を生成するPythonライブラリを作成しています。私は次の場合に立ち往生しました:
私の正規表現はMon - Fri 7am - 5pm Sat 9am - 3pm
asのグループを返す必要['Mon - Fri 7am - 5pm ', 'Sat 9am - 3pm']
がありますが、最初と2番目の間にコンマがある場合は、を返す必要があり[]
ます。
また、カンマはどこにあってもかまいませんが、2つの平日と期間の間に置くことはできません。例:Mon - Fri 7am - 5pm Sat 9am - 3pm and available upon email, phone call
を返す必要があり['Mon - Fri 7am - 5pm ', 'Sat 9am - 3pm']
ます。
これは私が試したことです、
import re
pattern = """(
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|m|w|f|thurs) # Start weekday
\s*[-|to]+\s* # Seperator
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|^(?![ap])m|w|f|thurs)? # End weekday
\s*[from]*\s* # Seperator
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?) # Start hour
\s*[-|to]+\s* # Seperator
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?) # Close hour
)"""
regEx = re.compile(pattern, re.IGNORECASE|re.VERBOSE)
print re.findall(regEx, "Mon - Fri 7am - 5pm Sat 9am - 3pm")
# output ['Mon - Fri 7am - 5pm ', 'Sat 9am - 3pm']
print re.findall(regEx, "Mon - Fri 7am - 5pm Sat - Sun 9am - 3pm")
# output ['Mon - Fri 7am - 5pm ', 'Sat - Sun 9am - 3pm']
print re.findall(regEx, "Mon - Fri 7am - 5pm, Sat 9am - 3pm")
# expected output []
# but I get ['Mon - Fri 7am - 5pm,', 'Sat 9am - 3pm']
print re.findall(regEx, "Mon - Fri 7am - 5pm , Sat 9am - 3pm")
# expected output []
# but I get ['Mon - Fri 7am - 5pm ', 'Sat 9am - 3pm']
また、正規表現でネガティブルックアヘッドパターンを試しました
pattern = """(
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|m|w|f|thurs)
\s*[-|to]+\s*
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|^(?![ap])m|w|f|thurs)?
\s*[from]*\s*
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?)
\s*[-|to]+\s*
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?)
(?![^,])
)"""
しかし、私は期待されていませんでした。条件をチェックするためのコードを明示的に書く必要がありますか?明示的な条件チェックを作成する代わりに、正規表現を変更する方法はありますか?
私が実装したいもう1つの方法は、コンマが存在しない場合は2つの平日の期間の間にコンマを挿入し、正規表現をgroup by / splitbycommに変更することです。"Mon - Fri 7am - 5pm Sat 9am - 3pm"
=>"Mon - Fri 7am - 5pm, Sat 9am - 3pm"