Cup*_*pid 7 java regex arrays string
我有一个看起来像这样的java字符串;
(fname:jon)(lname:doe)(guaranteer: Sam (W) Willis)(age:35)(addr:1 Turnpike Plaza)(favcolor:blue)
Run Code Online (Sandbox Code Playgroud)
我想从分隔符中拆分这个String (fname:jon)<here>(lname:doe)
.
我尝试通过正则表达式进行拆分,\)\(
但它只是破坏了我的代码
arr = s.split("\\)\\(");
for (String a: arr) System.out.println(a);
Run Code Online (Sandbox Code Playgroud)
产量
(fname:jon
lname:doe
guaranteer: Sam (W) Willis
age:35
addr:1 Turnpike Plaza
favcolor:blue)
Run Code Online (Sandbox Code Playgroud)
我也看了这个问题:如何拆分字符串,还要保留分隔符?,但它没有帮助,因为在我的情况下,我想要)(
均匀地保持分隔符和分割分隔符,即,第一个括号应该是第一个结果,第二个到第二个结果.
我使用的正则表达式是s.split("(?<=\\)\\()")
它给出了输出:
(fname:jon)(
lname:doe)(
guaranteer: Sam (W) Willis)(
age:35)(
addr:1 Turnpike Plaza)(
favcolor:blue)
Run Code Online (Sandbox Code Playgroud)
这是我想要的输出:
(fname:jon)
(lname:doe)
(guaranteer: Sam (W) Willis)
(age:35)
(addr:1 Turnpike Plaza)
(favcolor:blue)
Run Code Online (Sandbox Code Playgroud)
您可以使用正向前瞻和正向后视分割您的字符串,如下所示:
正则表达式 (?<=\))(?=\()
(?<=\))
positive lookbehind表示结束括号应位于分割位置之前.(?=\()
积极前瞻,表明开口括号应该遵循该分割位置.产量
(fname:jon)
(lname:doe)
(guaranteer: Sam (W) Willis)
(age:35)
(addr:1 Turnpike Plaza)
(favcolor:blue)
Run Code Online (Sandbox Code Playgroud)
码
String s = "(fname:jon)(lname:doe)(guaranteer: Sam (W) Willis)(age:35)(addr:1 Turnpike Plaza)(favcolor:blue)";
String arr[] = s.split("(?<=\\))(?=\\()");
for (String a: arr) System.out.println(a);
Run Code Online (Sandbox Code Playgroud)
你可以使用积极的lookbehind和负向前瞻来实现这个目标:
public static void main(String[] args) throws Exception {
String s = "(fname:jon)(lname:doe)(guaranteer: Sam (W) Willis)(age:35)"
+ "(addr:1 Turnpike Plaza)(favcolor:blue)";
String[] arr = s.split("(?<=\\)(?!\\s))"); // positive lookbehind for ")" and negative lookahead for "space"
for (String str : arr) {
System.out.println(str);
}
}
Run Code Online (Sandbox Code Playgroud)
O/P:
(fname:jon)
(lname:doe)
(guaranteer: Sam (W) Willis)
(age:35)
(addr:1 Turnpike Plaza)
(favcolor:blue)
Run Code Online (Sandbox Code Playgroud)