flutter - Dart:有没有办法不使用 Dart 的 split 方法将字符串拆分成句子?

标签 flutter dart

我希望使用 Dart 将一段文本拆分为单独的句子。我遇到的问题是句子可以以多个标点符号结尾(例如“.”、“!”、“?”),并且在某些情况下(例如日语),句子可以以独特的符号结尾(例如'。')。

此外,Dart 的 split 方法从字符串中删除拆分值。例如,当使用代码 text.split('! '); 时,“Hello World!”变成“Hello World”。

我已经环顾了可用的 Dart 软件包,但找不到任何可以满足我需求的东西。

理想情况下,我正在寻找类似于 Java 中的 BreakIterator 的东西,它允许程序员在检测标点符号时定义他们希望使用的区域设置,并在将字符串拆分成句子时维护标点符号。我很高兴在 Dart 中使用一个解决方案,该解决方案不会根据语言环境自动检测句子结尾,但如果这不可用,我希望能够定义在拆分字符串时要查找的所有句子结尾。

任何帮助表示赞赏。先感谢您。

最佳答案

它可以使用正则表达式完成,如下所示:

  String str1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In vulputate odio eros, sit amet ultrices ipsum auctor sed. Mauris in faucibus elit. Nulla quam orci? ultrices a leo a, feugiat pharetra ex. Nunc et ipsum lorem. Integer quis congue nisi! In et sem eget leo ullamcorper consectetur dignissim vitae massa。Nam quis erat ac tellus laoreet posuere. Vivamus eget sapien eget neque euismod mollis.";

  // regular expression:
  RegExp re = new RegExp(r"(\w|\s|,|')+[。.?!]*\s*");

  // get all the matches:
  Iterable matches = re.allMatches(str1);

  //  Iterate all matches:
  for (Match m in matches) {
    String match = m.group(0);
    print("match: $match");
  }

输出:
// match: Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
// match: In vulputate odio eros, sit amet ultrices ipsum auctor sed. 
// match: Mauris in faucibus elit. 
// match: Nulla quam orci? 
// match: ultrices a leo a, feugiat pharetra ex. 
// match: Nunc et ipsum lorem. 
// match: Integer quis congue nisi! 
// match: In et sem eget leo ullamcorper consectetur dignissim vitae massa。
// match: Nam quis erat ac tellus laoreet posuere. 
// match: Vivamus eget sapien eget neque euismod mollis.

关于flutter - Dart:有没有办法不使用 Dart 的 split 方法将字符串拆分成句子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60673641/

相关文章:

flutter - 下面的构造函数在 dart 中如何工作,我已经提取了小部件,而 flutter 为我的小部件提供了下面的构造函数

flutter - 如何使用 Map<DateTime, List<Event>> 添加新对(事件是随机类)?

android - Flutter 工作管理器返回 "Worker result FAILURE for Work [ id=XXXXXxXXXXxXXXX tags={ be.tramckrijte.workmanager.BackgroundWorker } ]"

generics - Dart 中带有泛型类型参数的回调

firebase - StreamBuilder 控件和 Firestore 定价

dart - polymer Dart 中的按钮单击不起作用;需要 polymer 元素

dart - 为什么将 TextField 放在 In Row 中时出现错误

Flutter:错误:无法将类型 'Object?' 的值分配给类型 'Output?' 的变量

flutter - Flutter 中的主屏幕小部件

android-studio - 错误 : Setting VM flags failed: unrecognized flags: disable-dart-dev