[英]remove part of matcher after the match in regex pattern
我需要帮助编写正则表达式模式,以从原始字符串中仅删除部分匹配器。
原始字符串: 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}
我需要这个正则表达式,以确保我从一些时间字段中删除只有毫秒,而不是点后面的所有内容。 但是使用上面的正则表达式,我也删除了分钟部分。 请提出建议和帮助。
将您的模式更改为(?::[0-5][0-9])(\\.[0-9]{1,3})
,在匹配器中运行find
并删除group(1)
找到的所有内容group(1)
。
反斜杠将强制匹配'。' char,而不是任何char,这是正则表达式中的点所代表的。
(?:
定义一个非捕获组,因此不会在匹配器的group(...)
考虑它。
并在您想要的内容周围添加括号将使其在匹配器中显示为组,在本例中为第一组。
一个很好的参考是模式javadoc: http : //docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html
您已在模式中定义了一个带有(...)
的捕获组 ,并且您希望在执行替换后将该部分字符串存在。 您只需要对此捕获中存储的值使用反向引用 。 它可以用$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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.