![正则表达式忽略特殊字符“|”的 9 次出现](https://linux22.com/image/1619466/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%BF%BD%E7%95%A5%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E2%80%9C%7C%E2%80%9D%E7%9A%84%209%20%E6%AC%A1%E5%87%BA%E7%8E%B0.png)
需要正则表达式来解析日志行,我必须选择第 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# 等)中使用正则表达式,该语言可能具有某种类型的字符串拆分功能。根据我的经验,按分隔符拆分并获取值列表/数组通常比使用正则表达式拆分更容易。