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

匹配竖线分隔字符串的正则表达式问题求助

解决竖线分隔字符串的分段匹配问题

嘿,我来帮你搞定这个正则匹配的问题!你之前的正则没达到预期,主要是因为它的逻辑和字符覆盖范围都不对,咱们一步步来修正。

你的问题核心

你需要匹配用竖线|分隔的字符串里的所有分段,但之前的(\d+)?|([A-Z+0-9+])?只能抓到233,其他像LTE02ERBS00126、N/A或者长路径这类分段都匹配不到。

为什么原来的正则不行?

咱们拆解下原来的表达式:

  • (\d+)?:匹配可选的一串数字,所以能抓到233,但遇到非纯数字的分段就失效了
  • |:分支分隔符,意味着要么匹配前面的数字,要么匹配后面的部分
  • ([A-Z+0-9+])?:这里的问题更大:
    • 字符集里的+是普通字符(不是量词),所以它只会匹配大写字母、数字或者+
    • ?表示可选,所以即使匹配到也只能是单个字符,没法匹配一整串字母数字
  • 最重要的是:这个正则完全没考虑到竖线分隔的结构,也没覆盖像/、.、,这类常见字符

正确的正则表达式

要匹配所有竖线分隔的分段,最简单且通用的写法是:

[^|]+

解释:

  • [^|]:匹配任何不是竖线的字符(这就覆盖了所有可能的分段内容,不管是数字、字母、符号还是路径)
  • +:表示匹配一个或多个这样的字符,确保抓到完整的分段

如果你的字符串可能存在空分段(比如233||LTE02ERBS00126这种连续竖线的情况),可以把+换成*,这样能匹配空内容:

[^|]*

测试效果

用你的目标字符串测试[^|]+,会得到以下所有10个分段:

  • 233
  • LTE02ERBS00126
  • N/A
  • ULSA
  • 1
  • 1
  • 263655
  • /company/ul_spectrum_files/MeContext=LTE02ERBS00126,ManagedElement=1,1,1,20180305.123252ULSA_SAMPLE
  • 1520253172
  • 1520253172

完美覆盖了你需要的所有内容!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:57:30