我想匹配使用.NET的字符串中的正数和负数(无小数或千分隔符),但我只想匹配整个单词。 因此,如果一个字符串看起来像正则表达式仅匹配整个单词中的数字
redeem: -1234
paid: 234432
那么我想匹配-1234和234432
但如果文字是
LS022-1234-5678
FA123245
那么我想没有匹配返回。我试过
\b\-?\d+\b
但它只会在第一种情况下匹配1234,不返回“ - ”符号。
任何帮助表示赞赏。谢谢。
我想匹配使用.NET的字符串中的正数和负数(无小数或千分隔符),但我只想匹配整个单词。 因此,如果一个字符串看起来像正则表达式仅匹配整个单词中的数字
redeem: -1234
paid: 234432
那么我想匹配-1234和234432
但如果文字是
LS022-1234-5678
FA123245
那么我想没有匹配返回。我试过
\b\-?\d+\b
但它只会在第一种情况下匹配1234,不返回“ - ”符号。
任何帮助表示赞赏。谢谢。
嗯,我敢肯定,这是远远不够完善,但它是否适合你的例子:
(?<=\W)-?(?<!\w-)\d+
如果你想允许下划线只是在号码前,然后我会用这个修改:
(?i)(?<=[^a-z0-9])-?(?<![a-z0-9]-)\d+
让我知道任何问题,我会尽力帮助。如果你想让我解释他们中的任何一个,请让我知道。
EDIT
为了只匹配,如果有一个空间或选项卡只是数/负符号之前(如在下面的评论说明),这可以用于:
(?<=[ \t])-?\d+
请注意,它会匹配例如在电话号码,时间或日期值的第一个数字序列上,并且如果该数字在该行的开头(在换行符后)则不匹配 - 确保这是你想要的:D
空间和-
之间没有字边界,因此您不能在那里使用\b
。
你可以使用:根据您的要求(这是未完全指定)
(?<!\S)-?\d+\b
或
(?<![\w-])-?\d+\b
。 两者都适用于你的例子。
你最有帮助,谢谢。这是好得多。但是,我没有正确定义任务:只有在正号或负号前加空格或制表符(我不希望空格或制表符包含在匹配中)时才需要匹配。 – Daniel 2012-04-05 17:59:07
@Daniel - 请参阅上面编辑中的修订 – 2012-04-09 14:03:02