正则表达式忽略特殊字符“|”的 9 次出现

正则表达式忽略特殊字符“|”的 9 次出现

需要正则表达式来解析日志行,我必须选择第 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# 等)中使用正则表达式,该语言可能具有某种类型的字符串拆分功能。根据我的经验,按分隔符拆分并获取值列表/数组通常比使用正则表达式拆分更容易。

相关内容