单个正则表达式首先匹配整个字符串然后分解为多个组件

时间:2018-02-22 18:37:32

标签: regex

我试图在供应商应用程序中提出一个RegEx(类似于POSIX),它返回如下图所示的数据并一次显示一行数据,因此我不需要考虑多行并且需要单独匹配一行。

它可以在字符串结果

中返回一个或多个值

应用程序不允许我使用"\d+\.\d+"从字符串中捕获组件,我需要将一行数据的所有组件映射到变量,即使我要去丢弃它或以其他方式返回否定匹配结果。

我的数据如下所示,带有奇怪的下划线填充。

USER |   ___________   3.58625 |   ___________   7.02235 |
USER |   ___________  10.02625 |   ___________  15.23625 |

语法是支持的 Matches REGEX "(Var1 Regex), (Var2 Regex), (Var3 Regex), (Var 4 regex), (Var 5 regex)"并且整个字符串必须与RegEx组件的聚合匹配,关闭一个字符并且什么也得不到。

" |"字符是数据的字段分隔符。

所以在上面我需要的是一个RegEx,它将它带到数字的开头并将其放在Var1中,然后在var 2中捕获带小数点的数值,然后捕获到Var中的下一个数字3,然后将数字保存在var 4中,然后捕获空格和结束字段|只有Var 2和4才有用,但我必须捕获整个字符串。

我主要尝试在酒吧之间捕捉" |"使用此question中的^.*\|(.*).\|*$

我还尝试了this question中提到的多变量([0-9]+k?[.,]?[0-9]+)\s*-\s*.*?([0-9]+k?[.,]?[0-9]+)

当我尝试通过RegExr使用它时,我似乎错过了一些正确的东西,我觉得我错过了一些非常简单的东西。

在RegExr中,我从来没有得到字符串的一个以上的部分我只得到数字,相当于单个变量中的整个字符串,或者只是在这个上下文中不能完成的数字来实现要求的目标。

文档提供的唯一示例如下所示,类似于本例中的SysLog条目,我在那里使用"使用资源名称进行合并:磁盘特定问题:脱机"

WHERE值匹配正则表达式"(。)资源名称:(。),具体问题:([^,] ),(。)&# 34; SET _Rrsc = var02 SET _Prob = var03

我已经将我的轮子旋转了几个小时,所以非常感谢任何指导/帮助让我超越这个驼峰。

1 个答案:

答案 0 :(得分:2)

Something like this should work

(\D+)([\d.]+)(\D+)([\d.]+)(.*)

或者用普通话说:Capture everything but numberscapture a decimal numbercapture everything but numberscapture a decimal numbercapture everything

使用USER | ___________ 10.02625 | ___________ 15.23625 |

  • $ 1 = USER | ___________  
  • $ 2 = 10.02625
  • $ 3 =  | ___________  
  • $ 4 = 15.23625
  • $ 5 =  |