是的,我确定之前在 StackOverflow 上有人问过这个问题,但如果是这样,请指出它,因为我找不到它。有很多正则表达式问题,有些甚至与我想要的相似。
基本上,我想匹配正数和负数的整数(即整数)。所以没有以小数点后跟更多数字结尾的东西。我只关心英文风格的编号,我不想让千位分隔符等,我只想用一个'.'作为小数点,一些国家没有这种奇怪的“逗号是小数点”。
^[+-]?\d+(?!\.\d)
但上面似乎匹配如下......
10 matches '10' <- yay
465654 matches '465654' <- yay
653.56 only matches '65' <- boo
1234.5 only matches '123' <- also boo!
在 regexper 上尝试这个,从视觉上看,它看起来和我想要的一模一样。我是负面前瞻的新手,所以我显然在这里错过了一些东西,但它是什么?
另外,我应该说我正在使用它作为我正在编写的解释器的一部分,因此我想在整数之后允许额外的内容。例如
12 + some_variable
或者(更复杂的)...
10.Tostring() <- should still match the '10'
最佳答案
您的模式匹配任何未跟有 .
和另一个数字的数字序列。在 1234.5
中,子字符串 123
后面没有 .
(因为它后面跟着 4
),所以它是有效匹配。
尝试使用结束 anchor ($
) 来确保在匹配的字符串之后没有其他字符出现:
^[+-]?\d+$
如果您需要允许匹配字符串后面的字符,您可以尝试使用否定先行以确保匹配的子字符串后面没有跟.
或 数字:
^[+-]?\d+(?![\d.])
要也匹配10.ToString()
这样的字符串,您还可以使用否定先行,如下所示:
^[+-]?\d+(?!\.?\d)
另一种策略是使用正前瞻,如下所示:
^[+-]?\d+(?=\.\D|[^.\d]|$)
关于c# - 我的正则表达式匹配整数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21664298/