Java 在正则表达式模式中匹配后删除部分匹配器

Java 在正则表达式模式中匹配后删除部分匹配器,java,regex,Java,Regex,我需要帮助编写正则表达式模式,以便只从原始字符串中删除匹配器的一部分 原始字符串:2017-02-15T12:00:00.268+00:00 预期字符串:2017-02-15T12:00:00+00:00 预期字符串以毫秒为单位删除所有内容 我的正则表达式模式看起来像这样:(:[0-5][0-9])\[0-9]{1,3} 我需要这个正则表达式来确保我只从某个时间域中删除毫秒,而不是从点后面删除所有内容。但是使用上面的正则表达式,我也删除了minute部分。请提供建议和帮助。将您的模式更改为(?:

我需要帮助编写正则表达式模式,以便只从原始字符串中删除匹配器的一部分

原始字符串:
2017-02-15T12:00:00.268+00:00

预期字符串:
2017-02-15T12:00:00+00:00

预期字符串以毫秒为单位删除所有内容

我的正则表达式模式看起来像这样:
(:[0-5][0-9])\[0-9]{1,3}


我需要这个正则表达式来确保我只从某个时间域中删除毫秒,而不是从点后面删除所有内容。但是使用上面的正则表达式,我也删除了minute部分。请提供建议和帮助。

将您的模式更改为
(?:[0-5][0-9])(\[0-9]{1,3})
,在匹配器中运行
查找
,并删除在
组(1)
中找到的所有模式

反斜杠将强制匹配“.”字符,而不是点在正则表达式中表示的任何字符

(?:
定义了一个非捕获组,因此在匹配器上的
组(…)
中将不考虑该组

在所需内容周围添加括号将使其在匹配器中显示为组,在本例中为第一个组

一个很好的参考是模式javadoc:

您已经在模式中定义了一个带有
(…)
,并且您希望在执行替换后显示字符串的这一部分。您所需要的只是使用一个值来表示此捕获中存储的值。可以使用
$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
请参阅和


替换模式中的
$1
告诉正则表达式引擎它应该在匹配对象数据中查找ID为1的捕获组。由于您只有一对未捕获的括号(1个捕获组),因此组的ID为1。

使用$1和$2变量进行替换

string.replaceAll("(.*)\\.\\d{1,3}(.*)","$1$2");

替换为
$1
。抱歉,您能详细说明一下吗?是的,()。看起来像是促销,但我如何将其作为java代码的一部分来处理,这$1是关于什么的?java代码的哪一部分?发布您的(编辑问题)。不,我需要确保我要删除任何我通过“:”标记确认的内容