假设我有这个字符串:
111 222 (333 444) 555 666 (777) 888
What I want is:
Group 1: 111 222
Group 2: 333 444
Group 3: 555 666
Group 4: 777
Group 5: 888
我有这个regex \(([^\)]+)\)
,但它只捕捉了paren之间的内容.
假设我有这个字符串:
111 222 (333 444) 555 666 (777) 888
What I want is:
Group 1: 111 222
Group 2: 333 444
Group 3: 555 666
Group 4: 777
Group 5: 888
我有这个regex \(([^\)]+)\)
,但它只捕捉了paren之间的内容.
你可以用
String text = "111 222 (333 444) 555 666 (777) 888";
RegExp rx = new RegExp(r'\(([^()]+)\)|[^()]+');
var values = rx.allMatches(text).map((z) => z.group(1) != null ? z.group(1)?.trim() : z.group(0)?.trim()).toList();
print(values);
// => [111 222, 333 444, 555 666, 777, 888]
看regex demo.输出要么是经过修剪的第1组值,要么是整个匹配值(也经过修剪).\(([^()]+)\)|[^()]+
模式匹配(
,然后将括号以外的任何一个或多个字符捕获到组1中,然后匹配)
,或者匹配括号以外的一个或多个字符.
为了避免出现空项,您可能需要至少一个非空白:
\(\s*([^\s()][^()]*)\)|[^\s()][^()]*
见this regex demo.Details:
\(
-(
个字符\s*
-零个或更多空白([^\s()][^()]*)
-第1组:除空格以外的字符,(
和)
,然后是除圆括号以外的零个或多个字符\)
-)
个字符|
-或[^\s()][^()]*
-除空格以外的字符,(
和)
,然后是除圆括号以外的零个或多个字符.