gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:30:46 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com