You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式提取竖线分隔字符串第n个Token及计数方法咨询

嘿,作为正则新手碰到这种带连续空Token的分割场景确实容易卡壳,我来一步步帮你解决问题~

一、提取指定位置的Token(包括空字符串)

当然存在满足需求的正则!你的目标字符串按|分割后,Token列表是:

  1. AA
  2. ''(空)
  3. CCCCCCCC
  4. ''(空)
  5. ''(空)
  6. FFFFFFFFFFF

要提取第N个Token,可以用这个通用正则模板:

^((?:[^|]*\|){N-1})([^|]*)
  • (?:[^|]*\|):非捕获组,匹配「任意非|字符+一个|」的组合,用?:避免生成多余的捕获组
  • {N-1}:重复这个组合N-1次,跳过前N-1个Token的内容
  • ([^|]*):捕获第N个Token的内容(包括空字符串,因为*允许匹配0个字符)

示例:

  • 提取第4个Token,用正则:^((?:[^|]*\|){3})([^|]*),捕获组2就是空字符串''
  • 提取第6个Token,用正则:^((?:[^|]*\|){5})([^|]*),捕获组2就是FFFFFFFFFFF

用Python代码验证:

import re
text = "AA||CCCCCCCC|||FFFFFFFFFFF"

# 提取第4个Token
match_4 = re.match(r"^((?:[^|]*\|){3})([^|]*)", text)
print(repr(match_4.group(2)) if match_4 else "无匹配")  # 输出 ''

# 提取第6个Token
match_6 = re.match(r"^((?:[^|]*\|){5})([^|]*)", text)
print(repr(match_6.group(2)) if match_6 else "无匹配")  # 输出 'FFFFFFFFFFF'

二、用正则高效统计Token总数

你原来的方法需要循环判断,确实可以用正则更高效地实现,有两种简单思路:

方法1:统计分隔符数量+1

因为每一个|都是分隔符,不管连续多少个,总Token数 = 分隔符|的数量 + 1。比如你的字符串里有5个|,5+1=6,正好是Token总数。

代码示例:

pipe_count = len(re.findall(r"\|", text))
token_count = pipe_count + 1
print(token_count)  # 输出 6

方法2:直接匹配所有Token后计数

用正则匹配所有Token(包括空的),然后取匹配结果的长度:

tokens = re.findall(r"(?:^|\|)([^|]*)", text)
print(len(tokens))  # 输出 6

这个正则的逻辑是:从字符串开头或|开始,匹配后续所有非|字符(包括0个,也就是空字符串),每一次匹配对应一个Token。


内容的提问来源于stack exchange,提问作者Pedro Vaquero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:20:21