我有一个字符串,其中包含yyyy-MM-dd格式的日期以及其他符号。
其中一些日期末尾包含'Z'符号。

例如:

control1970-04-26Z_shifted1982-02-01_Zulu1999-09-09Z


我需要消除字符串中的这些“ Z”符号,我想正则表达式将是一个不错的解决方案。

我已经尝试过以下正则表达式:

\d{4}-\d{2}-\d{2}Z{1}


但是它匹配整个日期,包括'Z'字符。

有什么方法可以只匹配'Z'字符并使用replaceAll方法消除它?

最佳答案

您可以使用捕获组,并用占位符替换为该组中存储的值:

String result = s.replaceAll("(\\d{4}-\\d{2}-\\d{2})Z", "$1");


请参见regex demo。在这里,(\\d{4}-\\d{2}-\\d{2})是捕获组,因为有一对未转义的括号,其值存储在组1中。Z刚刚匹配。当我们用$1替换匹配项时,日期会被粘贴回结果字符串中,而Z将被丢弃。

请注意,如果要确保只匹配四个数字,而前面没有四位数,请在模式前加上(?<!\\d)

如果要确保在Z之后没有其他字母,可以在模式末尾附加(?![a-zA-Z])

10-06 05:34
查看更多