0

正規表現を読んでいて、日付/月/年の形式の日付に一致する式を作成しようとしています。

式にはある程度の検証がありますが、それほど多くはありません。たとえば04/17/2012、17 番目の月がないため、有効な日付ではありません。

/セパレーターが, .,-の両方に.なるように式を作成していますが、コンポーネント間で同じセパレーターにしたいと考えています。正規表現を調整して/、日付と月の間の区切り記号 (またはその他) に一致する場合/、月と年の区切り記号 (または以前に一致したもの) のみに一致するようにする方法はありますか?

これが今の私の表現です。

(0[1-9]|[1-2][0-9]|3[0-1]|[1-9])(/|\.( |)|-)(0[1-9]|1[0-2]|[1-9])(/|\.( |)|-)([0-9]{4}|[0-9]{2})

C# で式を使用します。

4

3 に答える 3

1

後方参照\2で問題を解決できます:

^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$

詳細については、この記事をお読みください。

于 2012-04-17T08:59:00.130 に答える
0

これが私の答えです:

([0-2]\d|30|31)(/.-)(0\d|1[0-2])\2\d{4}

後方参照 \2 を使用し、[0-9] よりも \d を優先します

于 2012-04-17T09:11:26.883 に答える
0

\1(syntax untested) のような検索パターンで後方参照 ( ) を使用します。

\d+([-./])\d+\1\d+

またはより詳細に (Python)

>>> pat = re.compile(r"""
... \d{2}          # day
... ([-./])        # separator
... \d{2}
... \1             # repeat of first separator
... \d{4}          # year
... """, re.VERBOSE )
>>> mystr
'The date is 17/04/2012'
>>> result = pat.search(mystr)
>>> result.group()
'17/04/2012'

次に、は、最初の区切り文字として取得された\1ものと一致する必要があります。[-./]

実際に運用目的でこれを行いたい場合は、ほとんどの場合、一般的なパターンを使用して日付を見つけてから、適切な日付解析モジュールを使用して解析することをお勧めします。これは、日付には、正規表現にコーディングするのが難しい多くのエッジ ケースがあるためです。(簡単: 2000 年 2 月 29 日を正しく許可し、2001 年 2 月 29 日を許可しない正規表現を書いてください!)

于 2012-04-17T09:11:34.323 に答える