假设我有这个字符串:

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()][^()]*-除空格以外的字符,(),然后是除圆括号以外的零个或多个字符.

Dart相关问答推荐

DART列表由以奇怪方式链接的列表(即二维数组)组成

Flutter 中带有导航栏的永久视图

Dart 包版本如何工作以及我应该如何对我的 Flutter 插件进行版本控制?

'T'、'f'、'E'、'e'、'→' 在 dart/flutter 文档中代表什么?

我需要在使用之前将我的 Dart 包发布到 pub.dartlang.org 吗?

在dart polymer重复模板中获取索引

Flutter 中的 authStateChanges

Flutter:如何检测键盘按键?

什么是NoSuchMethod错误,如何修复?

Dart:Streams与 ValueNotifiers

如何在图像内的任意点上旋转图像?

如何在Flutter 的http.MultipartRequest请求上上传文件时获取进度事件

你如何在 Dart 中将月份的日期格式化为11th、21st或23rd?

dart2js代码比javascript快多少?

将函数/方法分配给 Dart 中的变量

在 Dart 和 Pub 中,我应该将 pubspec.lock 添加到我的 .gitignore 吗?

有没有办法在 Dart 中通过引用传递原始参数?

dart列表最小值/最大值

Dart 空值判断习惯用法或最佳实践是什么?

如何在 Dart 中调用超级构造函数?