3

時間を構成する文字列があり、時間を12時間形式にフォーマットしたかったのです。

私は試した、

pat1 = "(\d+):(\d+)?\s*pm"
pat1 = "(\d+):(\d+)?\s*am"
hooString = "673 HOO: Mon. 7:30 am - 6pm, Tue. 7:30am - 6 pm, Wed. 7:30 am - 6 pm, Thurs. 7:30 am - 6 pm, Fri. 8 am - 5 pm,"
hooString  = sub(compile(pat1, IGNORECASE), "\1:\2 AM", hooString)
hooString  = sub(compile(pat2, IGNORECASE), "\1:\2 PM", hooString)
print hooString

私は次のように出力を得ました、

673 HOO: Mon. 7:30 AM - 6pm, Tue. 7:30 AM - 6 pm, Wed. 7:30 AM - 6 pm, Thurs. 7:30 AM - 6 pm, Fri. 8 am - 5 pm,

しかし、「午前8時または午前8時」も「午前8時」に置き換える必要があったため、正規表現をわずかに変更しました

pat1 = "(\d+):?(\d+)?\s*am"
pat2 = "(\d+):?(\d+)?\s*pm"

「一致しないグループ」例外がスローされます。2 番目のグループが入力文字列に存在しないためです。

「%H:%M %P」と「%H %p」の両方の条件で例外なく期待される結果を得るにはどうすればよいですか?

また、「午前 8 時」の結果が「午前 8:00」と表示されれば、それが最良の回答になる可能性があります。

4

1 に答える 1

7

そもそもなぜ2つのグループがあるのですか?

pat1 = r"(\d+(?:[:]\d+)?)\s*am"
pat1 = r"(\d+(?:[:]\d+)?)\s*pm"

生の文字列の使用に注意してください。そうしないと、エスケープで問題が発生する可能性があります。

私は何をしましたか?私はすべての時間を 1 つのグループに詰め込んで、:\d+オプション (非キャプチャ グループ) にしました。交換はもちろん\1 AM\1 PMです。

于 2012-12-17T12:13:02.447 に答える