繁体   English   中英

带0或1的正则表达式数字-后跟数字

[英]Regex Numbers with 0 or 1 - follow by numbers

我正在尝试匹配此字符串,但是我没有工作。 字符串只能包含数字或带破折号的数字,后跟另一组数字。

我的正则表达式公式:

^([0-9]*|[0-9]*\-{1}[0-9]*)$

EX:

此通行证

123

此通行证

123-123

这应该失败,但是正在过去

123-

这应该是最简单,最有效的方法:

^\\d+(?:-\\d+)?$

^[0-9]+(?:-[0-9]+)?$ *

  • \\d是大多数正则表达式中可用的字符集,表示[0-9] 这是一种更简单的数字匹配方式,但是如果您更喜欢[0-9] ,则可以改用它。

  • 请注意,您的原始模式和其他人提供的作为答案的模式在连字符后包括了量词{1} 应该避免这种情况,因为它总是多余的。 没有量词的单个字符等效于相同字符,后跟{1}

*编辑:Wiktor提出了我不知道的内容。 在某些正则表达式中, \\d包括所有unicode数字,而不只是数字0到9。如果这是一个问题,则可以使用模式^[0-9]+(?:-[0-9]+)?$

您需要了解正则表达式不同部分的功能。 *表示零或某些符号的任何数字,在您的情况下为数字。

如果您想在破折号后至少输入一个数字,请使用+代替星号。

^([0-9]*|[0-9]*\-{1}[0-9]+)$

你很亲密!

*量词匹配0或多个数字。

您要查找的是与1个或多个数字匹配的+量词。

修改您的示例:

^([0-9]*|[0-9]+\-{1}[0-9]+)$

将不匹配任何内容,单个数字或数字

^[0-9]+(-[0-9]+)*$

^[0-9]+以一个或多个数字开头

(-[0-9]+)*零个或一个破折号,然后是长度为1或更大的数字

为了好玩,这里有一些无正则表达式的答案。 我发现它们更易于阅读。

如果不允许-123123--123

s.Split('-').All(x => x != string.Empty && x.All(char.IsDigit));

-之间的Foreach元素,我们检查该元素是否不为空并且仅由数字组成。

如果允许-123123--123

!s.EndsWith("-") && s.All(c => c == '-' || char.IsDigit(c));

检查字符串s不以-结尾,并且s-和数字组成。

在线尝试!

请注意, char.IsDigit将允许๔๕๖๗๘๙໐໑-௫௬௭௮ 如果您不希望与此匹配,请将char.IsDigit()替换为IsDigit()

public static bool IsDigit(char c) => c >= '0' && c <= '9';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM