繁体   English   中英

获取正则表达式值条件搜索

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM