我有一个数字串。我需要把这些数字分组在长度为3的块中,并用一个破折号分隔。如果需要,最后一个块或最后两个块的长度可以是2。
String abc = "12-10 23 5555 8361"; String hello = abc.replaceAll("[^a-zA-Z0-9]", "");
现在,我如何将它们分组为长度为3的块?预期结果为
121-023-555-583-61
j2cgzkjk1#
您也可以将三个数字分组,并替换为captured group和-。
-
正则表达式:(\d{3})**要进行的替换:**替换为\1-Java程式码
(\d{3})
\1-
String abc = "12-10 23 5555 8361"; String hello = abc.replaceAll("[^a-zA-Z0-9]", ""); System.out.println(hello.replaceAll("(\\d{3})", "$1-"));
o7jaxewo2#
您可以在基于lookbehind的正则表达式中使用\G:
\G
String abc = "12-10 23 5555 8361"; String hello = abc.replaceAll("[^a-zA-Z0-9]", ""); System.out.println(hello.replaceAll("(?<=\\G\\d{3})", "-")); // => 121-023-555-583-61
请参阅IDEONE demo(?<=\\G\\d{3})正则表达式只包含一个零宽度Assert,该Assert匹配字符串的开头或最后一个成功匹配(\G)的结尾,后跟3位数字(\d{3})。在Java正则表达式中,此模式在当前场景中工作正常(即\G从lookbehind中移动正则表达式索引)。但在Android中不起作用。
(?<=\\G\\d{3})
\d{3}
更新:
对于更新的需求,您可以使用几个步骤的方法,如
public static void main (String[] args) throws java.lang.Exception { String s = "0 - 22 1985--324"; // => 022-198-53-24 run(s); s = "555372654"; // => 555-372-654 run(s); s = "12-10 23 5555 8361"; // => 121-023-555-583-61 run(s); } public static void run(String abc) { String hello = abc.replaceAll("[^a-zA-Z0-9]", ""); hello = hello.replaceAll("(?<=\\G\\d{3})(?!$)", "-"); System.out.println(hello.replaceAll("\\b(\\d{2})(\\d+)-(\\d)$", "$1-$2$3")); }
请参阅another IDEONE demo正则表达式在字符串末尾的匹配失败的末尾更新为(?!$)。需要使用.replaceAll("\\b(\\d{2})(\\d+)-(\\d)$", "$1-$2$3")来重新排列末尾的最后2个数字组:如果有3个或更多的数字后面跟有连字符,然后只有1个数字,我们需要将连字符移到前2个数字之后,并将其他数字移到该连字符之后。
(?!$)
.replaceAll("\\b(\\d{2})(\\d+)-(\\d)$", "$1-$2$3")
2条答案
按热度按时间j2cgzkjk1#
您也可以将三个数字分组,并替换为captured group和
-
。正则表达式:
(\d{3})
**要进行的替换:**替换为
\1-
Java程式码
o7jaxewo2#
您可以在基于lookbehind的正则表达式中使用
\G
:请参阅IDEONE demo
(?<=\\G\\d{3})
正则表达式只包含一个零宽度Assert,该Assert匹配字符串的开头或最后一个成功匹配(\G
)的结尾,后跟3位数字(\d{3}
)。在Java正则表达式中,此模式在当前场景中工作正常(即\G
从lookbehind中移动正则表达式索引)。但在Android中不起作用。更新:
对于更新的需求,您可以使用几个步骤的方法,如
请参阅another IDEONE demo
正则表达式在字符串末尾的匹配失败的末尾更新为
(?!$)
。需要使用
.replaceAll("\\b(\\d{2})(\\d+)-(\\d)$", "$1-$2$3")
来重新排列末尾的最后2个数字组:如果有3个或更多的数字后面跟有连字符,然后只有1个数字,我们需要将连字符移到前2个数字之后,并将其他数字移到该连字符之后。