我需要帮助编写正则表达式模式以从原始字符串中仅删除部分匹配器。
原始字符串: 2017-02-15T12:00:00.268+00:00
预期字符串: 2017-02-15T12:00:00+00:00
Expected String 以毫秒为单位删除所有内容。
我的正则表达式模式如下所示:(:[0-5][0-9])\.[0-9]{1,3}
我需要这个正则表达式来确保我只从某个时间字段中删除毫秒,而不是点之后的所有内容。但是使用上面的正则表达式,我也删除了分钟部分。请提出建议和帮助。
最佳答案
您已经定义了一个 capturing group在您的模式中使用 (...)
,并且您希望在执行替换后出现该部分字符串。您只需要使用 backreference存储在此捕获中的值。可以用 $1
来完成:
String s = "2017-02-15T12:00:00.268+00:00";
String res = s.replaceFirst("(:[0-5][0-9])\\.[0-9]{1,3}", "$1");
System.out.println(res); // => 2017-02-15T12:00:00+00:00
参见 Java demo和一个 regex demo .
替换模式中的 $1
告诉正则表达式引擎它应该在匹配对象数据中查找 ID 为 1 的捕获组。由于您只有一对未转义的括号(1 个捕获组),因此该组的 ID 为 1。
关于java - 在正则表达式模式匹配后删除部分匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42527894/