【问题标题】:Split a text with regex in Java在 Java 中使用正则表达式拆分文本
【发布时间】:2019-10-14 14:33:11
【问题描述】:

我需要在 Java 中使用正则表达式拆分文本(每个子字符串将少于或接近 10 个字符(包括空格和特殊字符),并且不会拆分单词)。例如,“詹姆斯出去吃饭了。”将是“詹姆斯已经”、“出去”、“吃饭”、“。”。 提前致谢。

【问题讨论】:

  • 你能分享一下你试过的东西吗?
  • 我在 Guava 中尝试过 Splitter,例如 Splitter.on(regexp).trimResults().split(text)。对于正则表达式,我使用了类似“(\W|^)[\w.]{0,10} (\W|$)”的东西。我想这在逻辑上是不正确的。
  • 您可以从以下方面获得一些灵感:stackoverflow.com/q/4398270/9192223
  • 您必须确定子字符串部分的结束。如果我们确定 .和空格作为分隔符,那么你可以使用这种模式。 (.{0,10})(?:\s|\.) regex101.com/r/I1nrb6/1
  • @hiren 谢谢,有很多可能的方法来解决这个问题。但我想使用正则表达式。

标签: java regex split


【解决方案1】:

这个表达式可能有点复杂,也许我们可以从:

.{1,10}[^\s](?=\s|$)

DEMO

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = ".{1,10}[^\\s](?=\\s|$)";
final String string = "James has gone out for a meal.";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

正则表达式电路

jex.im 可视化正则表达式:

【讨论】:

    【解决方案2】:

    首先,删除所有双空格(如果存在)并应用此正则表达式。

    .{1,11}(?:\s|$)|.{1,11}(?:[^\s]|$)
    

    但我会使用 split 函数,然后使用“for 子句”计算长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2022-07-29
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多