我必须解释一堆文件,其中每一行代表一些最大浮点值。
{...}
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以包含更多值?
答案 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个或多个数字。