2012-04-05 117 views
1

我想匹配使用.NET的字符串中的正數和負數(無小數或千分隔符),但我只想匹配整個單詞。 因此,如果一個字符串看起來像正則表達式僅匹配整個單詞中的數字

redeem: -1234 
paid: 234432 

那麼我想匹配-1234和234432

但如果文字是

LS022-1234-5678 
FA123245 

那麼我想沒有匹配返回。我試過

\b\-?\d+\b 

但它只會在第一種情況下匹配1234,不返回「 - 」符號。

任何幫助表示讚賞。謝謝。

回答

0

嗯,我敢肯定,這是遠遠不夠完善,但它是否適合你的例子:

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

如果你想允許下劃線只是在號碼前,然後我會用這個修改:

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

讓我知道任何問題,我會盡力幫助。如果你想讓我解釋他們中的任何一個,請讓我知道。

EDIT

爲了只匹配,如果有一個空間或選項卡只是數/負符號之前(如在下面的評論說明),這可以用於:

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

請注意,它會匹配例如在電話號碼,時間或日期值的第一個數字序列上,並且如果該數字在該行的開頭(在換行符後)則不匹配 - 確保這是你想要的:D

+0

你最有幫助,謝謝。這是好得多。但是,我沒有正確定義任務:只有在正號或負號前加空格或製表符(我不希望空格或製表符包含在匹配中)時才需要匹配。 – Daniel 2012-04-05 17:59:07

+0

@Daniel - 請參閱上面編輯中的修訂 – 2012-04-09 14:03:02

1

空間和-之間沒有字邊界,因此您不能在那裏使用\b

你可以使用:根據您的要求(這是未完全指定)

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

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

。 兩者都適用於你的例子。

+0

仍然看起來以匹配他不想匹配的情況...(?)它不與數字匹配爲負數,但與數字匹配,因爲連字符不是字符字符 – 2012-04-05 17:34:17

+0

代碼騎師:你是正確的。我也需要匹配「 - 」。所提供的正則表達式也匹配了很多「垃圾」(意思是非整體詞)。 – Daniel 2012-04-05 17:43:04

+0

@Daniel的更新版本應該會更好。 – Qtax 2012-04-05 18:34:42

相關問題