2017-09-08 26 views
0

私は正規表現を持って、私は仕事だろうと思った正規表現:正整数2以上

r'^[2-9]|[1-9][0-9]+$' 

。ほとんどすべてのテスト条件は合格しますが、-011はこの正規表現ではチェックされません。どちらも840jとなります。私は理由を知るのは難しいです。私は厳密に負の数と非数字の文字を避けていると思った。

ここでは何が起こっていますか?

+0

をお勧めします

は、原子団(?:)

を使用して、あなたが適切なグループ化を正規表現を表示する必要がこれを行うには? 're.match'? 're.search'? –

+3

あなたは括弧が欠けているように見えます...左のアンカーは左の分離に属し、 ($の場合と同様に、 '23'ではなく '2'をキャプチャします)。 '^(?:[2-9] | 1 \ d)\ d * $'のようなものがあなたの後にあるかもしれません。 – Semicolon

答えて

0

@セミコロンはあなたの問題を指摘するコメントをしました。

あなたの正規表現は-0を無視し、[1-9][0-9]+$を使用して11と一致させることができるため、正規表現は-011と一致します。

あなたのオリジナルの正規表現は、あなたが常に$を行末に続く^その後、[2-9]または[1-9][0-9]+を開始する行を一致させたいように思わあなたの正規表現のマッチ^[2-9]または[1-9][0-9]+$を作るか、オペレータ|を持っています。あなたはどのようにあなたがこれを使用している

^(?:[2-9]|[1-9][0-9]+)$ 

https://regex101.com/r/B0dhYR/1

関連する問題