2012-04-05 8 views
1

.NETを使用して文字列内に正と負の数字(小数点または千字の区切り記号なし)を一致させたいが、単語全体を一致させたい。 文字列が全角で数字を一致させるRegEx

redeem: -1234 
paid: 234432 

のように見えるのであれば、私は-1234と234432

にマッチしたいと思います。しかし、テキストが

LS022-1234-5678 
FA123245 

であるならば、私はマッチが返されませんしたいです。試しました

\b\-?\d+\b 

ただし、最初のシナリオでは " - "記号が返されず、1234にのみ一致します。

何か助けていただければ幸いです。ありがとうございました。

答えて

0

まあ、私はここまで完璧からであると確信しているが、それはあなたの例のために働く

(?i)(?<=[^a-z0-9])-?(?<![a-z0-9]-)\d+ 

問題があれば教えてください。私はお手伝いします。もし私がどちらかを説明したいなら、それも私に知らせてください。

EDIT

だけ一致させるだけで数/負の符号(以下のコメントで述べたように)の前にスペースまたはタブがある場合、これを使用することができる:

(?<=[ \t])-?\d+ 

これは、たとえば電話番号、時間、または日付の値の最初の数字列にあり、改行の後に行番号がある場合は一致しません。 - これがあなたの意図したものであることを確認してください:D

+0

あなたが最も役に立ちます。ありがとうございます。これははるかに良いです。しかし、私はタスクを適切に定義することができませんでした。正または負の数字の前にスペースまたはタブ文字がある場合(マッチにスペースまたはタブが含まれないようにしたい場合のみ)、マッチします。 – Daniel

+0

@Daniel - 上記の編集のリビジョンをご覧ください –

1

スペースと-の間に単語境界がないため、\bは使用できません。

あなたは使用することができます

(?<!\S)-?\d+\b 

または

(?<![\w-])-?\d+\b 

は(完全に指定されていない)、あなたの要件に応じて。 どちらもあなたの例のために動作します。あなただけの数の前にアンダースコアを許可したい場合は

(?<=\W)-?(?<!\w-)\d+ 

が、その後、私はこの変更を使用すると思います:

+0

彼がマッチしたくない場合に一致するように...(?)それは負の数として数字と一致しませんが、ハイフンは '単語文字ではありません'ので、数字と一致します –

+0

コードジョッキー:あなたは正しい。私は " - "にもマッチする必要があります。また、提供されたRegExは、「ガベージ」(単語全体ではないことを意味する)も多くマッチしました。 – Daniel

+0

@ダニエル更新版はうまくいくはずです。 – Qtax

関連する問題