Dart:有没有一种方法可以不使用Dart的split方法将字符串拆分为句子?

时间:2020-03-13 15:59:23

标签: flutter dart

我正在寻找使用Dart将一段文本分割成单个句子的方法。我遇到的问题是句子可以以许多标点符号结尾(例如“。”,“!”,“?”),在某些情况下(例如日语),句子可以以唯一的符号结尾(例如'。”)。

此外,Dart的split方法从字符串中删除了split值。例如,使用代码text.split('! ');

时,“ Hello World!”变为“ Hello World”。

我一直在寻找可用的Dart程序包,但找不到能满足我需求的东西。

理想情况下,我正在寻找类似于Java中的BreakIterator的功能,该功能允许程序员定义在检测标点符号时希望使用的语言环境,并在将字符串拆分为句子时保留标点符号。我很高兴在Dart中使用一种解决方案,该解决方案不会根据语言环境自动检测句子结尾,但是如果无法使用,我希望能够定义所有在拆分字符串时要寻找的句子结尾。 >

感谢您的帮助。预先谢谢你。

1 个答案:

答案 0 :(得分:1)

可以使用正则表达式来完成,就像这样:

  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.