我有一个这样的字符串:
abc:def,ghi,jkl;mno:pqr,stu;vwx:yza,aaa,bbb;
我想先拆分;然后: 最后输出应该只是后一部分:即我的输出应该是
def, ghi, jkl, pqr, stu, yza,aaa,bbb
这可以使用Split两次完成,即使用;
一次,然后使用:
,然后使用模式匹配找到:
旁边的右侧部分。但是,有没有更好的优化解决方案来实现这一目标?
答案 0 :(得分:6)
所以基本上你想要在;
和:
之间获取内容,左边是:
,右边是;
。
您可以使用此正则表达式: -
"(?<=:)(.*?)(?=;)"
这包含look-behind
的{{1}}和:
的{{1}}。并匹配前缀为look-ahead
的字符串,后跟;
。
正则表达式说明: -
colon(:)
这是工作代码: -
semi-colon (;)
输出: -
(?<= // Look behind assertion.
: // Check for preceding colon (:)
)
( // Capture group 1
. // Any character except newline
* // repeated 0 or more times
? // Reluctant matching. (Match shortest possible string)
)
(?= // Look ahead assertion
; // Check for string followed by `semi-colon (;)`
)
答案 1 :(得分:3)
String[] tabS="abc:def,ghi,jkl;mno:pqr,stu;vwx:yza,aaa,bbb;".split(";");
StringBuilder sb = new StringBuilder();
Pattern patt = Pattern.compile("(.*:)(.*)");
String sep = ",";
for (String string : tabS) {
sb.append(patt.matcher(string).replaceAll("$2 ")); // ' ' after $2 == ';' replaced
sb.append(sep);
}
System.out.println(sb.substring(0,sb.lastIndexOf(sep)));
输出
def,ghi,jkl ,pqr,stu ,yza,aaa,bbb
答案 2 :(得分:0)
除非你必须使用Java,否则不要模式匹配;如果您不能在字段名称中使用':'字符(在您的示例中为abc),则可以使用indexOf(":")
找出“正确的部分”。