[英]get regex value conditional search
我正在使用正则表达式解析“速度”值。
当两个值都存在于组中时,我能够做到这一点——实际值和给定值(如前 1 所示)。 但是当速度值不存在于“实际值”中,而仅存在于“给定值”中时。
我的正则表达式正在从中获取价值。!
如果该值不存在于“实际值”中,我如何添加默认值并在新行开始之前结束搜索。
actual values[\w\W]*?[vV]elocity XYZ\D+ [\w\W]*?(.+)
前任。 1:
正则表达式完美地工作并给我所有的组。
----- actual values
Machine XYZ [mm]: 855.7766 -2578.3709 -1001.7072
velocity XYZ [mm]: -.0002 .2765 .0050
----- given values
Machine XYZ [mm]: 855.7745 -2580.1412 -1001.7041
velocity XYZ [mm/s]: -.0522 -60.0000 .0648
前任。 2:
正则表达式从给定值解析值,尽管我在实际值中没有任何速度。
----- actual values
Machine XYZ [mm]: 855.7766 -2578.3709 -1001.7072
val XYZ [mm]: -.0002 .2765 .0050
----- given values
Machine XYZ [mm]: 855.7745 -2580.1412 -1001.7041
velocity XYZ [mm/s]: -.0522 -60.0000 .0648
您可以使用负先行检查下一行是否不是空行或以velocity
开始(?!
\bactual values.*(?:\r?\n(?![^\S\r\t]*(?:[Vv]elocity|$)).*)*\r?\n.*[vV]elocity XYZ[^\d\r\n]+(.*)
\bactual values.*
匹配实际值和该行的其余部分(?:
非捕获组
\r?\n
匹配一个换行符(?!
Negative lookahead,断言右边的不是
[^\S\r\t]*(?:[Vv]elocity|$)
匹配 0+ 个没有换行符的空格并匹配 velocity 或字符串的结尾)
关闭负前瞻.*
匹配除换行符之外的任何字符 0+ 次)*
关闭非捕获组并重复0+次\r?\n.*
匹配换行符除换行符之外的任何字符 0+ 次[vV]elocity XYZ[^\d\r\n]+
匹配velocity XYZ
和 1+ 次不是数字或换行符(.*)
捕获组 1,匹配除换行符以外的任何字符 0+ 次您也可以更具体地匹配第 1 组中的数字,而不是使用.*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.