RegEx - 提取类似的组

时间:2017-01-30 14:24:20

标签: regex

我必须解释一堆文件,其中每一行代表一些最大浮点值。

{...}
SomeMaximumVal: 630.0 (AB300: 420.0) (AB301: 220.0)
SomeOtherMaximumVal: 610.0 (AB300: 410.0) (AB301: 210.0)
{...}

单行可以包含只是一个共同值,例如

SomeMaximumVal: 630.0

或常用值和一个应用程序特定值,例如

SomeMaximumVal: 630.0 (AB300: 420.0)

或常用值和多个应用程序特定值,例如

SomeMaximumVal: 630.0 (AB300: 420.0) (AB301: 220.0)

或没有共同值,只是一个或多个应用程序特定值,例如

SomeMaximumVal: (AB300: 420.0) (AB301: 220.0)

现在我想通过正则表达式

提取这些值
\s*(?:(\S*)\s*:\s*([0-9\.-]*)(?:\s*\(\s*(\S*)\s*:\s*([0-9\.-]+)\)))

但是,例如文件的结果

SomeMaximumVal: 630.0 (AB300: 420.0) (AB301: 220.0)
SomeOtherMaximumVal: 610.0 (AB300: 410.0) (AB301: 210.0)

是:

Match 1
  Full match    0-36    SomeMaximumVal: 630.0 (AB300: 420.0)
    Group 1.    0-14    SomeMaximumVal
    Group 2.    16-21   630.0
    Group 3.    23-28   AB300
    Group 4.    30-35   420.0

Match 2
  Full match    52-94   SomeOtherMaximumVal: 610.0 (AB300: 410.0)
    Group 1.    53-72   SomeOtherMaximumVal
    Group 2.    74-79   610.0
    Group 3.    81-86   AB300
    Group 4.    88-93   410.0

其中包含仅每个应用程序特定值的第一个

问题是:如何扩展RegEx以包含更多值?

1 个答案:

答案 0 :(得分:1)

您可以使用

(\w+)\s*:\s*(-?[0-9]+(?:\.[0-9]+)?)

请参见regex demo

详细信息

  • (\w+)-第1组:一个或多个单词字符
  • \s*:\s*-用0+空格括起来的冒号
  • (-?[0-9]+(?:\.[0-9]+)?)-第2组:
    • -?-1个或0个连字符
    • [0-9]+-1个或更多数字
    • (?:\.[0-9]+)?-1次或0次出现:
      • \.-点
      • [0-9]+-1个或多个数字。