2016-10-22 10 views
1

私のプロジェクトで正規表現を学習しようとしています。入力検証には正規表現の使用が最良の方法の1つだと言われています。空白で区切られた複数の座標に一致するRegexの式

文字列にスペースで区切られた未知数の座標が含まれていることを確認しようとしています。入力がどのように表示されるかの例は、2,2 23.45,6 45,21.65 2,2です。問題があるかどうかはわかりませんが、最後の座標は常に最初の座標と一致します。シンボルや余分なスペースやコンマは使用できません。コンマで区切られた10進数のみ、スペースまたはエンドライン文字が続きます。

これはおそらくかなり複雑な表現であることを認識しています。私は正規表現のブラインドにかなりジャンプしていますので、これに関する助けがあれば本当に感謝しています。私はC++でプログラミングしています。ありがとう。

EDIT:

私は負の数と改行文字の可能性について忘れていました。私はまた、入力に負の数と改行文字を受け入れます。 したがって入力-2.3,2 34,-2 -2.3,2\nが受け入れられます。これまでの皆さん、ありがとうございました。

+0

数字を区切るスペースとカンマがあるようです。 –

+0

@TimBiegeleisen技術的に順序付けられたペアです。ですから、コンマで区切られた2つの数字が必要です。そして、順序付けられたペアが1つ以上ある場合、それらはスペースで区切られます。 – rph020798

+0

負数、指数表記はどうですか?あなたは、構文が何であるかを記述するために、ほとんどあなた自身で式を書く必要があります。 "+ 4.3、 - "です。有効なコンポーネントですか? –

答えて

1

あなたは、この正規表現を試すことができます:ここ

^\d+(?:\.\d+)?,(?:\d+(?:\.\d+)? \d+(?:\.\d+)?,)*\d+(?:\.\d+)?$ 

デモ:

Regex101

注:任意の番号と一致\d+(?:\.\d+)?正規表現、おそらく小数の成分を有します。括弧内の?:は、数量を非キャプチャグループとしてマークします。これは正規表現エンジンに実際に何かを捕まえたくないので、内部にあるものを捕らえないように指示します。これにより、より効率的な正規表現が得られる可能性があります。

+0

不完全ですが、たとえば署名仕様と改行については、これが答えだとしましょう。さて、正規表現を理解していない人はどのように答えを確認するのですか?それでも、あなたには寛大です。 –

+0

私は改行について考えていなかったし、OPはネガティブの可能性について言及していなかった。 –

+0

+1 regex101、質問者が単にそれを達成しようとするのではなく正規表現を学ぶことを可能にするもの。私はそれをブックマークしています。 –

関連する問題