0

Pythonで日付形式mm/ddを認識するREを書き込もうとしています

reg = "(((1[0-2])|(0?[1-9]))/((1[0-9])|(2[0-9])|(3[0-1])|(0?[0-9])))"
match = re.findall(reg, text, re.IGNORECASE)
print match

text = '4/13' の場合、それは私に与えます [('4/13', '4', '', '4', '13', '13', '', '', '')]

最初の要素だけが必要です。不正確な一致は必要ありません。削除するにはどうすればよいですか。

ありがとう、

チェン

4

2 に答える 2

1

正規表現の括弧の各セットが一致グループを生成するため、これらすべての一致を取得しています。(?:...)結果セットにグループを含めたくない場合は、 などの非グループ一致を使用できます。リストから最初の項目を取得し、他の項目を無視することもできます。

これにより、式は次のようになります。

reg = "((?:(?:1[0-2])|(?:0?[1-9]))/(?:(?:1[0-9])|(?:2[0-9])|(?:3[0-1])|(?:0?[0-9])))"

詳細については、reドキュメントを参照してください。

完全な例を次に示します。

>>> text='4/13'
>>> reg = "((?:(?:1[0-2])|(?:0?[1-9]))/(?:(?:1[0-9])|(?:2[0-9])|(?:3[0-1])|(?:0?[0-9])))"
>>> re.findall(reg, text, re.IGNORECASE)
['4/13']
于 2012-05-07T15:33:29.287 に答える
0

それらは「不正確な一致」ではありません。タプルの最初の項目は一致した文字列に対応し、他の項目は正規表現の括弧内のセクションに対応します。

文字列に複数の日付がある場合は、次のようにします。

reg = re.compile(...)
dates = [match[0] for match in reg.findall(text, re.IGNORE_CASE)]
于 2012-05-07T15:36:03.357 に答える