首页 > 解决方案 > 如何用数据获取数据

问题描述

我尝试使用此 regex 获取块.*[%].*(?:.*|(?:\n.+)*)

我想获得包含%如下运算符的行:

Match 1:
Test14%=SN54LS161AJ=U14, 

Match 2:
U15%=123131CCC11=U15, LOGIC , ---, 40394 
[Unit] = 
[Diag] = Tests ERROR

Match 3:
P10%=SN54LS161AJ=U14, LOGIC , ---, 40734 

Match 4:
X10%=123C11=U15, LO
[Unit] = 
[Diag] = Tests ERROR 70

Match 5:
N20%=SN54LS161AJ=U14, LO

Match 6:
N20%=123C11=N20
[Unit] = 
[Diag] = Tests ERROR 2

我在这里举个例子:https ://regex101.com/r/BPLJlJ/1

标签: regex

解决方案


在您尝试的模式中,这部分(?:\n.+)*将不会被评估,因为第一个替代方案.*将始终匹配,并且只会匹配一行。

您可以将模式更新为

[^\r\n%]*%.*(?:\n.+)*

正则表达式演示

或者更具体的模式可能是:

^[^\r\n%]*\d%=.*(?:\r?\n\[[^][\r\n]*].*)*
  • ^[^\r\n%]*匹配除换行符以外的任何字符或%
  • \d%=.*匹配一个数字%=和该行的其余部分
  • (?:非捕获组
    • \r?\n
    • \[[^][\r\n]*].*匹配 from[...]和该行的其余部分
  • )*关闭组并选择性地重复它

正则表达式演示


推荐阅读