重复一组字符

时间:2017-11-14 11:07:16

标签: c# regex

我有以下输入与正则表达式匹配:

1.1.1.1
1.01.1.1
01.01.091.01
1.10.100.0010

所以我总共有四组由数字组成。虽然前三个应该匹配,但最后一个不应该匹配。

所以我写了这个正则表达式:

^(\d*[1-9]+\.){4}$

通常,此正则表达式应返回所有字符串,其中任何组中的任何数字后跟零。或者更容易:我想不能将所有数字与尾随零匹配。

然而,这与任何事都不相符。 regex1010.com告诉我们:

  

重复捕获组仅捕获最后一次迭代。放一个   捕获重复组周围的组以捕获所有迭代或   如果您对数据不感兴趣,请使用非捕获组

但是当我添加另一个捕获组时,我收到相同的消息:

^((\d*[1-9]+\.)){4}$

同样适用于非捕获组:

^(?:\d*[1-9]+\.){4}$

当然,我可以写四次同一组,但这很笨拙,难以阅读。

3 个答案:

答案 0 :(得分:1)

正如其他人所说,点是点,所以我们有三个相同的组,一个没有点。

所以这个正则表达式为我做了:

(?:\d*[1-9]\.){3}(?:\d*[1-9])

答案 1 :(得分:0)

您永远不会在模式中指定点。你要求的是,实际上,不是重复四个,它是由点分隔的四个数字的特定单一模式。

^(\d*[1-9]+\.\d*[1-9]+\.\d*[1-9]+\.\d*[1-9]+)$

你唯一可以考虑重复的是“数字+点”部分,但是你重复三次次并添加另一个数字。那么正则表达式就会变成这样:

^((\d*[1-9]+\.){3}\d*[1-9]+)$

但是,您的第三行末尾包含一个空格,因此您可能需要添加额外的检查来修剪它们。

答案 2 :(得分:-1)

你的正则表达式的问题在于不包括.你的正则表达式无法找到四个数字匹配,因为它们之间总是有点。'

请尝试this

(?:(\d*[1-9])\.?){4}