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代码的哪一部分?发布您的(编辑问题)。不,我需要确保我要删除任何我通过“:”标记确认的内容