
[英]Regular expression for Digits, Decimal, Hyphen and Brackets at any position
[英]Regular expression for x number of digits and only one hyphen?
我做了以下正则表达式:
(\d{5}|\d-\d{4}|\d{2}-\d{3}|\d{3}-\d{2}|\d{4}-\d)
它似乎工作。 也就是说,它将匹配5位数字或5位数字,其中只有1个连字符,但连字符不能是引导或结束。
我想要一个类似的正则表达式,但是对于一个25位数字。 如果我使用与上面相同的策略,正则表达式会很长。
任何人都可以建议一个更简单的正则表达式?
附加说明:我将此正则表达式放入一个XML文件中,该文件将由ASP.NET应用程序使用。 我无法访问.net后端代码。 但是我怀疑他们会做点什么:
Match match = Regex.Match("Something goes here", "my regex", RegexOptions.None);
您需要使用前瞻:
^(?:\d{25}|(?=\d+-\d+$)[\d\-]{26})$
说明:
\\d{25}
,25位数。 [\\d\\-]
(数字或连字符)的26个字符并且它匹配\\d+-\\d+
- 意味着它在中间只有一个连字符。 你可以使用这个正则表达式:
^[0-9](?:(?=[0-9]*-[0-9]*$)[0-9-]{24}|[0-9]{23})[0-9]$
前瞻确保只有1个破折号,角色类确保第一个和最后一个之间有23个数字。 我认为可能会缩短。
编辑:一个'比特'更短的xP
^(?:[0-9]{25}|(?=[^-]+-[^-]+$)[0-9-]{26})$
我承认,有点类似于Kobi的。
如果你对长度没有挑剔(即你只想要一个带有可选连字符的数字串),你可以使用:
([\d]+-[\d]+){1}|\d
(您可能需要根据具体情况为此添加行/字边界)
如果您需要具有特定的匹配长度,则此模式不起作用。 Kobi的答案可能更适合你。
我认为最快的方法是做一个简单的匹配,然后加上捕获缓冲区的长度,为什么在正则表达式中尝试数学,没有任何意义。
^(\d+)-?(\d+)$
这将匹配25位数字,中间恰好有一个连字符:
^(?=(-*\d){25})\d.{24}\d$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.