我想格式化带有数字和其他字符的字符串: 样品
input =>输出
我只为数字提供解决方案:
regexp =“(?= [0-9] {2})(([0-9]){2})”
replacement =“$ 1”
答案 0 :(得分:5)
试试这个
(\D*)(\d)(?:(\n)|(\D*)(\d)(\n?))
或者
(\D*)(\d)(?:(\n|$)|(\D*)(\d)((?:\n|$)?))
<强>解释强>
( … )
:捕获小组sample
\
:逃脱一个特殊字符sample
*
:零次或多次sample
(?: … )
:非捕获组sample
|
:替代/或操作数sample
?
:一次或无sample
输入:
012df3g4h5j6 78
012df3g4h5j6 7
012 3 45 6 78
012 3 45 6
012345678
01234567
01234567
输出
01 23 45 67 8
01 23 45 67
01 23 45 67 8
01 23 45 6
01 23 45 67 8
01 23 45 67
01 23 45 67
答案 1 :(得分:2)
您可以分两步完成:
String repl = str.replaceAll("\\D", "").replaceAll("(\\d{2})(?!$)", "$1 ");
在第一步中,我们从字符串中删除所有非数字,在第二步中,我们在除了最后一位之外的每2位数后插入一个空格。
修改强>
这是一个步骤:
String repl = str.replaceAll("\\D*(\\d)(?!\\d?$)(?:\\D*(\\d))?\\D*", "$1$2 ");
答案 2 :(得分:1)
一个简单的答案(没有正则表达式)将遍历字符串查找数字并创建一个新的字符串,并将它们分组为两个。
String input = ...;
String output = "";
boolean space = false;
for (char c : input.toCharArray()) {
if (!Character.isDigit(c)) {
continue;
}
output += c;
if (space) {
output += ' ';
}
space = !space;
}
output = output.trim(); //To remove trailing space if present
如果您认为字符串连接太多,则可以考虑使用StringBuffer