正则表达式提取由管道分隔的字符串的第 n 个标记

Ped*_*ero 1 regex db2 db2-400

我是正则表达式的新手

我需要从以下示例文本中计算和提取标记:

AA||CCCCCCCC|||FFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

请求第 4 个令牌我必须得到一个空的 '' 字符串,请求第 6 个令牌我必须得到 'FFFFFFFFFFFF'

有可能有这样的正则表达式吗?

提前致谢!

PS:对于令牌计数,我使用'\|'向结果添加 +1 是字符串不为空,当然还有另一种更有效的方法可以使用正则表达式来做到这一点......

ctw*_*els 5

拆分字符串|会更有效,但这也有效。

代码

我们将把计数器称为大括号之间的数字{X}。该计数器从 0 开始。如果设置为0,我们将获取1st元素,如果设置为5,我们将获取6th元素,等等。

请参阅此处使用的正则表达式

^(?:[^|]*\|){5}\K[^|]*
Run Code Online (Sandbox Code Playgroud)

或者,如果\K您的正则表达式引擎不支持,您可以使用以下内容(导致第一个捕获组):

^(?:[^|]*\|){5}([^|]*)
Run Code Online (Sandbox Code Playgroud)

解释

  • ^ 在行首断言位置
  • (?:[^|]*\|){5} 正确匹配以下 5 次
    • [^|]*匹配除|任意次数外的任何字符
    • \||字面匹配
  • \K重置比赛的起点。任何先前消耗的字符不再包含在最终匹配中
  • [^|]*匹配除|任意次数外的任何字符