c# - 我的正则表达式匹配整数有什么问题?

标签 c# regex .net-3.5

是的,我确定之前在 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.])

Demonstration


匹配10.ToString()这样的字符串,您还可以使用否定先行,如下所示:

^[+-]?\d+(?!\.?\d)

Demonstration

另一种策略是使用前瞻,如下所示:

^[+-]?\d+(?=\.\D|[^.\d]|$)

Demonstration

关于c# - 我的正则表达式匹配整数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21664298/

相关文章:

c# - 自定义控件属性 - C#、窗体

javascript - 不使用后向匹配此字符串 - Javascript Regex

c# - 使用 Regex.Matches 确定匹配的模式

python - 最后一场比赛结束的 anchor

c# - Listview ItemSelectionChanged 触发两次?

c# - 将 ASP.NET 应用程序移植到 Linux 下的 Mono/Apache

c# - 在 LINQ to SQL 中联接多级关系

c# - 在 .NET Web 应用程序中获取登录用户的 UPN 或电子邮件

sql - WCF 模拟和 SQL 可信连接?

c# - FormatProvider vs. 扩展方法 vs. 新类