我有一个像这样的字符串:
"tag0 tag1 yellow\ green tag2"
我想在每个未转义的空格之后分割它,所以我得到这个结果:
result[0] = "tag0"
result[1] = "tag1"
result[2] = "yellow\ green"
result[3] = "tag2"
有什么功能可以帮我做到这一点吗? string.split()使用正则表达式 "[^\\] "
也会删除最后一个字符,这是我想避免的。这是我通过 string.split 和 "[^\\] "
得到的结果:
result[0] = "tag"
result[1] = "tag"
result[2] = "yellow\ gree"
result[3] = "tag2"
最佳答案
使用负向后查找可能是一种解决方法,但它不能保证前面的反斜杠本身不是转义的反斜杠。例如:
tag0 tag1 yellow\\ green tag2
如果您可以避免拆分,而是在正则表达式下面进行匹配将匹配预期的 block :
[^\s\\]+(?:\\.[^\s\\]*)*
分割:
[^\s\\]+
匹配除空格和反斜杠之外的任何内容(?:
启动非 capturin 组\\.
匹配转义字符[^\s\\]*
匹配除空格和反斜杠之外的任何内容
)*
NCG 结束,尽可能重复多次
Java:
String regex = "[^\\s\\\\]+(?:\\\\.[^\\s\\\\]*)*";
String string = "tag0 tag1 yellow\\ green tag2";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
关于java - 使用正则表达式分割字符串,但在子字符串中包含部分正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49387859/