我需要一个正则表达式来执行以下操作:
我有这个字符串:123.45.678.7,我需要替换第二个中的所有 (.) 字符。结果将是 123.456787
¿ 任何人都可以帮助我吗?
System.out.println(
"123.45.678.7".replaceAll("\\G((?!^).*?|[^\\.]*\\..*?)\\.", "$1"));
123.456787
这也可以在没有正则表达式的情况下完成:
String str = "123.45.678.7";
String[] arr = str.split("\\.", 2);
System.out.println(arr[0] + "." + arr[1].replace(".", ""));
123.456787
只需创建一个函数...
function removeAllButFirst(myParam)
{
var numReplaces = 0;
var retVal = myParam.replace(/\./g, function(allMatch, currMatch) {
return ++numReplaces==1 ? '.' : ''; });
return retVal;
}
刚刚翻找了一下,在网上找到了这个 - 它相当粗糙,但可以完成这项工作......
retVal = retVal.replaceFirst(".","$");
retVal = retVal.replaceAll(".","");
retVal = retVal.replaceFirst("$",".");
这确实假设您的输入中没有任何 $'s - 如果您确实选择了不同的字符。它不是很好,在 Java 上可能有一个更好的单一正则表达式,使用 LookBehinds 之类的东西,但我不是 Java 开发人员,所以不能说。
此代码使用正则表达式匹配所有句点,然后将第一个小数点放回字符串中。
以下是测试结果:
123.45.678.7, 123.456787
这是代码。
public class SecondMatch {
public String match(String s) {
StringBuilder builder = new StringBuilder();
String[] parts = s.split("\\.");
for (int i = 0; i < parts.length; i++) {
builder.append(parts[i]);
if (i == 0) {
builder.append(".");
}
}
return builder.toString();
}
public static void main(String[] args) {
String s = "123.45.678.7";
String t = new SecondMatch().match(s);
System.out.println(s + ", " + t);
}
}
这个正则表达式也应该工作:
String str = "123.45.678.9";
String repl = str.replaceAll("([^.]*\\.[^.]*|[^.]*)\\.", "$1");
// repl = 123.456789