0

私が一致させようとしているパターンは、いくつかの文字 (文字 + 数字 + ハイフン(-))、次に 5 桁、次に 9 桁です。パターンの各部分はハイフンで区切られます(-)。5 桁と 9 桁の部分はオプションです。つまり、一方が存在し、他方が存在しないか、両方が存在するか、両方が存在しない可能性があります。したがって、パターンは次のようになります

bla-12-bla-98-bla-12345-123456789     all parts(characters+5-digit+9-digit)
bla-bla-123-12345                     9-digit part absent
blasd-123456789                       5-digit part absent
no-1045-numeric-bla-bla               both numeric parts absent

私が思いついた正規表現はこれです

.+(\d{5})?-?(\d{9})?$

上記の理由は次のようになります。.+最初の はすべての文字に一致するため(\d{5})?、5 桁の部分の 0 または 1 つのインスタンスが存在する可能性があるため、省略可能になります。

の場合-?、両方の数値部分が存在しない場合は存在しません-が、両方の数値部分が存在する場合は 1 に-なるため、ここでもオプションにします。

についても同様です(\d{9})?

しかし、上記のパターンは何にも一致しません。私は python を使用しているので、group(1)group(2)returnの両方を使用していNoneます。

上記の何が問題になっていますか?

4

1 に答える 1

2

問題は.+冒頭です。正規表現インタープリターは、 がいつ.+終了するかを推測できません。したがって、パターンは実際には一致しますが、一致グループは常に、None既に観察したとおりになります。使うだけなら

(\d{5})?\-?(\d{9})?$

代わりに、すべての例に一致し、一致グループが適切に認識されます。

于 2012-06-17T20:18:07.837 に答える