【问题标题】:Split on period but ignore some words which contains period in java在句号上拆分,但忽略一些在 java 中包含句点的单词
【发布时间】:2017-12-07 06:01:27
【问题描述】:

我想将一个文档分成几个段落,为此,我正在使用。

字符串段落[] = documentData.split("\.\n");

但它会从实际文档中删除 .\n。我不想丢失那些令牌。另外,我想要像 Inc. 这样的词。等 Jr. 不应该被正则表达式分割。

【问题讨论】:

  • 您的所有句子是否在每个句号后都有两个空格(句号)?你的问题的第一部分很容易,第二部分就不那么容易了。您需要对每个可能的缩写进行硬编码,或者告诉我们如何区分句号和其他类型的句点。
  • 讨厌的边缘情况:如果句子以 Jr. 结尾怎么办,例如I like Ken Griffey Jr. ... 在这种情况下,即使排除某些缩写也会失败。
  • @TimBiegeleisen:如果一个句子以 Jr. 结尾,那么它不应该被打破。
  • 您将不得不提供一些关于如何检测句子结尾的逻辑。否则,我会说你的问题太宽泛了。
  • 让我重新表述这个问题:文本应该在句号上被打断,但如果句号出现在 Jr. 等或 Inc. 等某些词之后,那么它不应该被拆分。

标签: java arrays regex string


【解决方案1】:

这是一个非常基本的脚本,只是为了给你指明正确的方向:

String input = "Sentence one in paragraph one.  Sentence two in paragraph one.\n Sentence one in paragraph two.  Sentence two in paragraph two.";
String[] parts = input.split("(?<=\\.\n)\\s*");
for (String part : parts) {
    System.out.println(part);
}

在不消耗点的情况下拆分点的一种方法是使用环视。 Lookarounds 匹配,但不消耗,使它们非常适合您的想法。在这种情况下,我将按照以下模式进行拆分:

(?<=\.\n)\s*

这断言当前位置之前的内容是句号后跟换行符。然后在将段落打印到控制台之前,它会消耗任何可能分隔段落的空格。

Demo

【讨论】:

  • 我想在句点后跟新行 (.\n) 分开,因为我使用了 String input = "Hello World。小面包师昨晚在这里。先生。熊也路过。\n这是另一句话。"; String[] parts = input.split("(? 但输出为:parts [0] = “Hello World。小面包师昨晚来了。熊先生也来过。” parts[1] = "\n" parts[2] = "This is another sentence." 我想要如下输出:parts[0] = "Hello World. The Jr. baker 最后来了晚上。熊先生也路过。\n" parts[1] = "这又是一句。"
  • @SandeepJoshi 检查我更新的答案,你的评论让我意识到我想多了这个问题。
  • 感谢最终的正则表达式和演示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
  • 2016-09-29
  • 2017-01-12
  • 1970-01-01
  • 2014-03-13
相关资源
最近更新 更多