以特定模式或特定字符后替换char

时间:2018-06-14 05:48:42

标签: java regex string

手头的任务是取代" - "用" /"以生日形式,例如03-12-89 -> 03/12/89。然而," - "必须能够出现在字符串中的其他位置,例如"我生日那天:03/12/89"。

我尝试过创建子串,替换" - "在生日部分,然后再次组合字符串。但是,该解决方案不灵活且无法通过测试用例。

我认为我必须能够用正则表达式做到这一点,尽管我似乎无法构建它。现在我回到:String newStr = input.replace("-", "/");删除" - "的所有实例我不想要的。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式:

(?<=\d{2})-

替换\/(无需在Java中转义)

<强> INPUT:

My-birthday-is-on-the: 03-12-89

<强>输出:

My-birthday-is-on-the: 03/12/89

demo

<强>代码:

String input = "My-birthday-is-on-the: 03-12-89";
System.out.println(input.replaceAll("(?<=\\d{2})-", "/"));

<强>输出:

My-birthday-is-on-the: 03/12/89

答案 1 :(得分:2)

最简单的想法是匹配\d{2}-\d{2}-\d{2}和捕获组。然后,使用这些捕获的数字以您希望的方式重建生日。像这样:

String input = "My-birthday-is-on-the: 03/12/89";
input = input.replaceAll("\\b(\\d{2})-(\\d{2})-(\\d{2})\\b", "$1/$2/$3");

Demo

指定完整模式的优点是,它避免了匹配6位数字短划线生日以外的任何东西的机会。

修改

根据您在下面的评论,听起来好像您想要用两个短划线分隔的数字替换,任意位数。在这种情况下,我们可以稍微修改上面的代码:

String input = "Your policy number is: 123-45-6789.";
input = input.replaceAll("\\b(\\d+)-(\\d+)-(\\d+)\\b", "$1/$2/$3");