古いJavaコードを見て、いくつかの文字列から日付とそのフォーマットを抽出しました。条件や正規表現のパターンやマッチャーがひどく混乱した。 だから私は最近、これをPythonでどのように解決するのかと考えました。私は、日付形式にマップされた数多くの正規表現パターンを持っています。そこから、時にはタイムスタンプが作成されます。私はちょうどJavaソリューションからそれらをコピーしたので、私はこれらの日付のパターンを変更する必要があることだと思う*二重引用符を使用してRegExを追加の "命令"にマッピング
pattern_dic = {
"[\\d]{2}:[\\d]{2}, .{3} [\\d]{1,2}, [\\d]{4} \\(UTC\\)": "HH:mm, MMM dd, yyyy (zzz)",
"[\d]{2}:[\d]{2}, [\d]{1,2} .{3} [\d]{4} \(UTC\)" : "HH:mm, dd MMM yyyy (zzz)",
...
}
:私は「Javaでswitch文がある場合は、Pythonでdictonaryがあるはずです」を聞きました。
正規表現/置換のペアがある別の問題では、このような辞書を使用してかなり良い解決策を見つけました。 (Stack Overflowの素晴らしい人に礼儀正しくて)これは、一致する正規表現が単純な文字列である場合にのみ機能するので、辞書で検索することができます(私は思う)。
pattern_acc = re.compile(r'\b(' + '|'.join(pattern_dic.keys()) + r')\b')
comment = pattern_acc.sub(lambda x: pattern_dic[x.group()], comment)
ここまでは私がこれまでに思いついたことです。
def multi_match(input_string, pattern_dic):
date_pattern = re.compile(r'\b(' + '|'.join(pattern_dic.keys()) + r')\b')
matches = date_pattern.findall(input_string)
date_formats = []
for match in matches:
matching_string = match.group()
date_format = pattern_dic["matching_date_pattern"]
date_formats.append((matching_string, date_format))
が編集: 私はと述べている必要があります私の問題は、私は私の辞書(「matching_date_pattern」)でルックアップするために正規表現のマッチングの部分を得ることができる方法がわからないということですこれを予備的な問題として解決したい。マッチングと検索を分けていきたいと思います。一致するパターンにアクセスすることができます。 たとえば、正規表現が多数のグループで構成され、一致する「命令」がより複雑になると考えてください。たとえば、リンク、マークダウン要素など、さまざまなテキストオブジェクトがたくさんあるとします。私の現時点での問題は、マッチングと検索の間にどのパターンがマッチしているかを知ることです。
多分、パターンをコンパイルするのはどれほど費用がかかりますか?それはもちろん、それらを別々にコンパイルすれば、それらにアクセスしやすくなります。
パターンを繰り返して、一致するものが見つかると必要な値を取得する方が簡単です。 –