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

2024-04-23 20:39:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用regex解析“velocity”值。你知道吗

当两个值都存在于组中时,我能够做到这一点-实际值和给定值(如ex1所示)。但当速度值不存在于“实际值”中,而只存在于“给定值”中时。你知道吗

我的正则表达式正在从中获取价值。!你知道吗

如果“实际值”中不存在默认值,如何添加该值,并在新行开始之前结束搜索。你知道吗

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

Tags: valmachine速度givenregexmmvalues价值
1条回答
网友
1楼 · 发布于 2024-04-23 20:39:02

您可以检查下一行是否不是空行,或者是否以velocity开头,使用负的lookahead (?!

\bactual values.*(?:\r?\n(?![^\S\r\t]*(?:[Vv]elocity|$)).*)*\r?\n.*[vV]elocity XYZ[^\d\r\n]+(.*)
  • \bactual values.*匹配实际值和行的其余部分
  • (?:非捕获群
    • \r?\n匹配换行符
    • (?!负面展望,断言右边的不是
      • [^\S\r\t]*(?:[Vv]elocity|$)匹配0+个不带换行符的空白,并匹配速度或字符串结尾
    • )关闭负面展望
    • .*匹配除换行符以外的任何字符0+次
  • )*关闭非捕获组,重复0+次
  • \r?\n.*将换行符与除换行符以外的任何字符进行0+次匹配
  • [vV]elocity XYZ[^\d\r\n]+匹配velocity XYZ和1+次不是数字或换行符
  • (.*)捕获组1,匹配除换行符以外的任何字符0+次

Regex demo

您还可以更具体地匹配组1中的数字,而不是使用.*

Regex demo

相关问题 更多 >