1

次のタイプの文字列を一致させようとしています。

123456

1234.56

123,456

1,234.56

.123456

これらの文字列が一致していないことを確認したい:

12,34.56

1.23,456

これは私がこれまでに思いついたものです (このフォーラムの以前の投稿の助けを借りて):

(?<acreage>((\d{1,3}(,\d{3})+)?|\d*)\.\d+|(\d{1,3}(,\d{3})+|\d+)\.?)

これはすべての有効な文字列に一致していますが、無効な文字列の一部にも一致しています。

私が望むのは、開始時にある種の境界条件を配置することですが、一致させようとしている面積の前にテキストがある可能性があるため、^ 文字にすることはできません。\b 文字はコンマを単語境界として扱います。したがって、次のような文字列の場合は、

12,34,567.89

文字列のどの部分とも一致しないようにしたい場合は、34,567.89 を返します。

面積文字列の後に特定の文字をチェックするので、123,4567 から 123,456 & 7 を取得するような間抜けなことをすることについてはあまり心配していません。

これを有効な文字列のみに一致させ、無効な文字列には一致させないようにする方法を教えてください。

4

1 に答える 1

1

これで十分ですか?

(?<![\d.,])(?<acreage>((\d{1,3}(,\d{3})+)?|\d*)\.\d+|(\d{1,3}(,\d{3})+|\d+)\.?)(?![\d.,])

あなたの式に否定後読み (?<![\d.,])と否定先読み アサーションを追加しました(?![\d.,])

(?<![\d.,])前に数字、no .、 no がないことを保証します,

(?![\d.,]).数字がないこと、次がないこと、および,次がないことを保証します

ここでRegexrを参照してください

それはあなたの個人番号の境界であり、あなたの番号の周りに番号で許可されていない文字があることを確認します.

于 2012-08-09T21:27:07.370 に答える