需要正则表达式来解析日志行,我必须选择第 10 次出现管道符号后的数据|
示例日志行;
Info device Allow:FWD|TCP|data1|data2|data3|data4|data5|data6|data7|data8|data9|data10|data11|0|1|0|0|0|0||||||
我必须从上面的日志行中选择数据9。
下面是我现在使用的表达式,这是一个 Java 程序
表達式:
\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|
选择组 11
而不是一个接一个地转义字符,而是跳过/忽略 10 个管道符号并选择data9
答案1
这就是量词的用途。
^(?:[^|]*\|){10}([^|]*)
答案2
如果您在另一种编程语言(Python、C# 等)中使用正则表达式,该语言可能具有某种类型的字符串拆分功能。根据我的经验,按分隔符拆分并获取值列表/数组通常比使用正则表达式拆分更容易。