【问题标题】:Regular expression to remove the dot (.) from a number [duplicate]从数字中删除点(。)的正则表达式[重复]
【发布时间】:2020-04-24 21:42:26
【问题描述】:

我想用 Java 编写一个正则表达式来删除数字中的点 (.) 以及它后面的所有数字。

示例:3.14

需要一个正则表达式来只返回 3。

我正在尝试使用这个块:

String value = "3.14";
value = value.replaceAll("[[.]]", "");
System.out.println(value);

显然,它只是删除了“.”。我尝试了其他匹配项,例如 [[.*$]] 以删除所有内容,直到行尾,但它让我无处可去。

我正在使用这张表 (http://tutorials.jenkov.com/java-regex/syntax.html),我发现它实际上还不错,并测试它的用途。

【问题讨论】:

  • 你真的了解value.replaceAll("[[.]]", "") 的作用吗?您尝试将"[[.*$]]" 作为正则表达式这一事实表明您没有这样做。
  • @luk2302 你是对的。我正在努力理解它如何在字符串中向内和向外查找模式,以及它如何从开始到某个点以及从某个点到结尾搜索事物
  • @luk2302 这是一个很好的。但我想知道正则表达式在 java 中是如何工作的

标签: java regex


【解决方案1】:

[] 表示一个字符类[[.]] 最终只匹配 .,尽管在您的情况下外部 [] 是不必要的(和/或您可以使用 \ 代替)。

要删除后跟数字的.,请匹配.\d+(一位或多位数字)。因为. 表示“任何字符”,所以您必须转义它(\.[.] 工作)。因为\ 在字符串文字中具有特殊含义,所以正则表达式的任何反斜杠也需要转义(使用另一个反斜杠)。所以:

value = value.replaceAll("\\.\\d+", "");
// Or: value = value.replaceAll("[.]\\d+", "");
// Or: value = value.replaceAll("[.][0-9]+", ""); (avoiding backslashes entirely)

如果您只想在一个数字之后执行此操作(而不是在“Blah .123”中),您可以在开头添加 positive lookbehind 以要求一个数字:

value = value.replaceAll("(?<=\\d)\\.\\d+", "");
// Or: value = value.replaceAll("(?<=\\d)[.]\\d+", "");
// Or: value = value.replaceAll("(?<=\\d)[.][0-9]+", ""); (avoiding backslashes entirely)

Pattern documentation 中描述了这些不同的功能。

示例 (live copy):

class Example
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String value = "Testing 3.14 testing 2.45534 testing .123 testing";
        System.out.println(value.replaceAll("\\.\\d+", ""));
        System.out.println(value.replaceAll("[.]\\d+", ""));
        System.out.println(value.replaceAll("[.][0-9]+", ""));

        value = "Testing 3.14 testing 2.45534 testing .123 testing";
        System.out.println(value.replaceAll("(?<=\\d)\\.\\d+", ""));
        System.out.println(value.replaceAll("(?<=\\d)[.]\\d+", ""));
        System.out.println(value.replaceAll("(?<=\\d)[.][0-9]+", ""));
    }
}

输出:

测试 3 测试 2 测试 测试 测试 3 测试 2 测试 测试 测试 3 测试 2 测试 测试 测试 3 测试 2 测试 .123 测试 测试 3 测试 2 测试 .123 测试 测试 3 测试 2 测试 .123 测试

注意后三个没有替换.123,因为它前面没有数字。前三个做到了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    相关资源
    最近更新 更多