首页 > 解决方案 > 具有多个数组返回的字符串拆分

问题描述

我正在开发一个代码,我需要用 | 来分割行,以识别和创建 TreeMap。例子:

Op|id       |first_name|last_name|gender|email               
I |123      |".|."     |n/a      |F     |myemail@hotmail.com

你怎么看,有些用户开玩笑并在文本中间放了一个单字符,现在,当我们尝试用 | 分割行时 出现异常行为:

string.split("|")

我创建了以下正则表达式来避免它,但不能完全工作:

(\|)[^.*\"|]

正则表达式101 - 测试

您可以看到我的代码从 | 获取下一个字符。我想要的是避免任何 | 在一个或多个双引号之间

任何人都可以给我一个关于如何改进我的正则表达式的方向吗?

标签: javaregex

解决方案


假设平衡引号字符,在不在引号内的管道上拆分:

string.split("\\|(?=(([^\"]*\"){2})*[^\"]*$)");

现场演示

这通过在管道字符后需要偶数个引号字符来实现。


推荐阅读