【问题标题】:Split using (.) except to numbers使用 (.) 拆分,数字除外
【发布时间】:2022-12-16 09:03:31
【问题描述】:

我需要用 (.) 分隔一个句子 但是,我遇到了数字。我如何定义一个 split(.) 排除数字之间的点?

例子:

“我付了 1.000 美元。很贵。但我想今天应该更便宜。”

我懂了:

我付了1。
000 美元。
非常贵。
但我认为今天应该更便宜。

但我需要这个:

我付了 1.000 美元。
非常贵。
但我认为今天应该更便宜。

【问题讨论】:

标签: java split


【解决方案1】:

使用this answer 中的正则表达式,您可以执行以下操作:

    public static String[] split(String str) {
        return str.split("[\.\!]+(?!\d)\s*|\n+\s*");
    }

结果:

I paid 1.000 dollars
Very expensive
But I think today it should be cheaper

regex101.com

【讨论】:

    【解决方案2】:

    只需使用 negativa lookarounds:

    String x = "I paid 1.000 dollars. Very expensive. But I think today it should be cheaper.";
    String[] chunks = x.split("(?<!\d)\.(?!\d)");
    for(int i = 0; i < chunks.length; i++){
        System.out.println(chunks[i].trim());
    }
    

    解释:

    我使用了 negativa lookahead,它断言后面的内容不匹配指定的模式,所以 (?!d) 保证我们将匹配,如果文本后面没有任何数字 d

    我也使用了 negativa loookbehind,但它完全等同于上面,但只看文本前面的内容,而不是后面的内容。所以以同样的方式,我们只是确保之前的不是数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2015-06-15
      • 2011-11-17
      • 2018-04-04
      相关资源
      最近更新 更多