Thi*_*use 5 java regex string parsing
我需要拆分包含基本数学表达式的字符串,例如:
"(a+b)*c"
或者
" (a - c) / d"
分隔符是+ - */()和空格,我需要它们作为独立的标记.基本上结果应如下所示:
"("
"a"
"+"
"b"
")"
"*"
"c"
而对于第二个例子:
" "
"("
"a"
" "
"-"
...
我阅读了很多关于类似问题的问题,而不太复杂的分隔符,常见的答案是使用零空间正向前瞻和后方.
像这样:(?<=X | ?=X)
X表示分隔符,但是将它们放在这样的类中:
[\\Q+-*()\\E/\\s]
不能以所需的方式工作.
那么我如何格式化分隔符以使分割工作我需要它?
---更新---
不应拆分Word类字符和更长的组合.
例如"ab""c1"或"12".
或者简而言之,我需要与StringTokenizer相同的结果,给出参数" - +*/()"和true.
尝试使用分割数据
yourString.split("(?<=[\\Q+-*()\\E/\\s])|(?=[\\Q+-*()\\E/\\s])(?<!^)"));
Run Code Online (Sandbox Code Playgroud)
我认为您遇到的问题不是部分问题\\Q+-*()\\E,而是在(?<=X | ?=X)<-中(?<=X)|(?=X),因为它应该产生后视和前视。
演示"_a+(ab-c1__)+12_" (顺便说一句_,代码中将替换为空格。SO 将两个空格显示为一个,因此必须使用__某种方式来呈现它们)
String[] tokens = " a+(ab-c1 )+12 "
.split("(?<=[\\Q+-*()\\E/\\s])|(?=[\\Q+-*()\\E/\\s])(?<!^)");
for (String token : tokens)
System.out.println("\"" + token + "\"");
Run Code Online (Sandbox Code Playgroud)
结果
" "
"a"
"+"
"("
"ab"
"-"
"c1"
" "
" "
")"
"+"
"12"
" "
Run Code Online (Sandbox Code Playgroud)