3

「V102」のように前に文字が含まれていない場合は、「100」、「1.1」、「5.404」などの数字と一致させたい。

これが私の現在の正規表現です:

(?<![A-Za-z])[0-9.]+

これは、0〜9の任意の文字に一致することになっています。プレフィックスがない場合(A-Za-z)、1回以上の繰り返し。

しかし、それは02としてV102と一致するので、Vともう1つの文字を切り取って、残りは実際にはその場合とはまったく一致しないはずですが、適合します。すべての番号を取得し、プレフィックスが存在しないかどうかを確認するようにするにはどうすればよいですか?

4

6 に答える 6

8

ネガティブルックビハインドに数字と小数点を追加します。

(?<![A-Za-z0-9.])[0-9.]+

これにより、すべての一致が数字および文字以外(つまり、スペースまたはその他の区切り文字)で始まるように強制されます。そうすれば、数字の終わりも有効な一致ではなくなります。

デモ:http ://www.rubular.com/r/EDuI2D9jnW

于 2012-12-24T17:22:07.067 に答える
2

単語の境界を使用できる可能性はありますか?

\b[0-9\.]+\b
于 2012-12-24T17:20:02.423 に答える
2

正規表現を試してください:

(?<![A-Za-z0-9])[0-9.]+
于 2012-12-24T17:22:14.150 に答える
1

文字列のどこにも文字やスペースが必要ない場合は、次のように機能します。

^[0-9.]+$
于 2012-12-24T17:23:52.053 に答える
1

非正規表現ソリューション。

次の文字double.TryParse列がある場合は、その文字列がdoubleであるかどうかを確認するために使用できます。試す:

string str = "100 1.1 V100 d333 ABC 1.1";
double temp;
string[] result = str.Split().Where(r => (double.TryParse(r, out temp))).ToArray();

または、代わりにdouble配列が必要な場合は、次のようにします。

double[] numberArray = str.Split()
                          .Where(r => double.TryParse(r, out temp))
                          .Select(r => double.Parse(r))
                          .ToArray();
于 2012-12-24T17:26:03.593 に答える
0

カレット^演算子を使用してみてください。この演算子は、パターンを入力の先頭から開始することを示します。たとえば^[0-9.]+、数字またはaで始まり、.任意の数の入力に一致します。このパターンは数字だけに一致するわけではないことに注意してください。たとえば2.00.2、有効な数字ではない1ドットを超えるパターンにも一致するためです。

于 2012-12-24T17:19:32.987 に答える