2012-04-05 119 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

相关问题