如何编写仅分割无空格相邻竖线短语的正则表达式
解决竖线两侧无空格时才分割的正则问题
核心需求回顾
要处理的测试字符串:
Other Suggestions|Like | Comment | Subscribe|134|58|Post |Contact Us
只分割那些竖线前后都没有空格的位置,保留Like | Comment | Subscribe、Post |Contact Us这类带空格竖线的完整片段。
为什么你之前的正则没生效
你用的(?<!\s)[^|]+(?!\s)是试图匹配「前后无空格的非竖线内容」,但它无法识别包含空格和带空格竖线的完整片段(比如Like | Comment | Subscribe里的竖线前后有空格,导致整个片段不符合这个正则的匹配逻辑),所以没法得到预期结果。
两种可行解决方案
方案1:用符合要求的竖线作为分割符
直接匹配前后都无空格的竖线作为分割标记,正则表达式为:
(?<!\s)\|(?!\s)
用这个正则对原字符串执行分割操作,就能得到目标结果:
Other SuggestionsLike | Comment | Subscribe13458Post |Contact Us
方案2:直接匹配所有目标片段
如果不需要分割,而是直接提取所有符合要求的片段,可以用这个正则:
(?<=^|(?<!\s)\|)(.*?)(?=(?!\s)\||$)
它的逻辑是:
- 断言片段开头是字符串起始,或者一个「前后无空格的竖线」
- 非贪婪匹配内容,直到遇到下一个「前后无空格的竖线」或者字符串结尾
匹配后得到的结果和分割方案完全一致。
内容的提问来源于stack exchange,提问作者codeMatt0101
相关产品推荐
相关产品推荐

