正则表达式 - 带或不带单个负号的整数

时间:2016-12-01 01:38:46

标签: c# regex

我正在尝试为一个数字创建一个正则表达式,该数字可以选择前面加一个' - '。

到目前为止我所拥有的是:"-?\\d+"(在C#中使用双反斜杠来逃避'\')

问题是这也匹配--123。我希望开头只能有一个负面符号。

3 个答案:

答案 0 :(得分:1)

如果您正在验证字符串是否包含数字而没有其他内容,即字符串包含可选的连字符后跟一些数字,那么您可以将模式锚定到字符串的开头和结尾,从而{{1} }。

另一种验证字符串看起来像是负数的方法是将其解析为具有^-?\d+$int.Parse方法的整数。如果解析成功,那么您有一个与所需模式匹配的有效数字。对于整数来说太大(正或负)的数字将无法解析。使用int.TryParselong.Parse方法可以接受更大的数字。对于任意大数字,还有一个long.TryParse类。

答案 1 :(得分:0)

使用:

"(?:(?<!-)-)?\\d+"

<强>解释

(?<!)

这是negative lookbehind assertion,表示“不得以此为先”。它也是零宽度,所以不消耗任何东西。

(?:)

这是non-capturing group,因为我们不想捕捉匹配的内容。该组仅用于逻辑,因此关闭了捕获。

答案 2 :(得分:0)

如何在C#

中将其解析为int
int num;
bool success = int.TryParse(val, out num);

离开正则表达式直到你真的需要它......