正则表达式匹配,直到逗号前的最后3个字符

时间:2015-01-08 21:17:37

标签: java regex

也许这是在某个地方被问到但当然我找不到我想要的答案:

我很难匹配字符串中的特定字符:

"88551554,86546546,51516565"

我想要匹配的数字是以下的X:

"XXXXX554,XXXXX546,XXXXX565"

现在我只能找到每个逗号前的最后3位数字:

\d{3}(?=,)

由于数字的长度是动态的,似乎无法指定3位数之前的位数。

任何人都可以提供帮助吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

您可以使用此前瞻性正则表达式:

(\d+)(?=\d{3}(?:,|$))

RegEx Demo

这将匹配并分组必须后跟3位数字的1位或更多位数以及逗号或输入结束。检查已捕获组的演示链接中的匹配信息


更新:要使用X替换所有匹配的数字:

str = str.replaceAll("\\d(?=\\d*\\d{3}(?:,|$))", "X");

RegEx Demo2

答案 1 :(得分:1)

要匹配它,请使用:

\d+(?=\d{3})

这个正则表达式确实:

\d+ ...在一个和无限时间之间匹配一个数字(0-9)  (?=\d{3}) ...在正向前瞻中匹配一个数字(0-9)正好三次。