Regex 正则表达式-提取相似群

Regex 正则表达式-提取相似群,regex,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 (

我必须解释一组文件,其中每一行代表某个最大浮点值

{...}
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)
或一个通用值和一个特定于应用程序的值,例如

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)
或一个通用值和一个以上的应用程序特定值,例如

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)
或者没有通用值,只有一个或多个特定于应用程序的值,例如

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)
它们是:

仅包括每个应用程序特定值的第一个

问题是:如何扩展正则表达式以包含更多的值?

您可以使用

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

详细信息

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

结果中的组数由您在模式中定义的捕获组数决定。