版本号的正则表达式

时间:2014-05-15 12:23:42

标签: c# .net regex

我想在两种不同类型的版本号之间进行选择:

  1. 2014.4.5.6
  2. 2014.4.5
  3. (也是修订部分是可选的)

    我有一个搜索模式:(\d*)\.(\d*)\.(\d*)(\.(\d*))?

    找到1.和2.总是五个实例:

    1. 2014.4.5.6有5个小组:201445.66
    2. 2014.4.5有5个小组:201445,[空​​],[空]
    3. 我的问题是:

      • A)如何更改我的搜索模式以摆脱1中的.6组。?
      • B)如何更改我的搜索模式以摆脱2中的空组。?

      所有这些都在一个正则表达式中。可能吗?实际上,解决问题A就足够了,搜索模式就像现在一样离开2.

3 个答案:

答案 0 :(得分:1)

对于(a),您可以通过在开头插入(...)

来设置群组?: 非捕获

对于您的示例,这将提供(?:...)

对于(b),您无法摆脱空组,但您可以查看(\d*)\.(\d*)\.(\d*)(?:\.(\d*))?上的Success property,看看它是否成功。

(这可以让您区分例如Group 成功匹配零字母,([A-Z]*)不匹配。)

答案 1 :(得分:0)

此正则表达式适用于任意数量的组:

(\d+)(?:\.|$)

正在检查一组数字后跟一个点或文件的末尾。 它将返回示例1中的4个匹配项和示例2中的4个匹配项。

即。 2014.4.5.6将捕获

2014
4
5
6

答案 2 :(得分:0)

实际上,在使用.NET测试应用程序时,我发现这种搜索模式实际上对我有用:(\d*)\.(\d*)\.(\d*)(\.(\d*)?)?

我之前在online regex builder玩。我在那里有那些额外的团体。应该从一开始就使用.NET测试工具。