匹配竖线分隔字符串的正则表达式问题求助
解决竖线分隔字符串的分段匹配问题
嘿,我来帮你搞定这个正则匹配的问题!你之前的正则没达到预期,主要是因为它的逻辑和字符覆盖范围都不对,咱们一步步来修正。
你的问题核心
你需要匹配用竖线|分隔的字符串里的所有分段,但之前的(\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
相关产品推荐
相关产品推荐

