-1

我需要一个正则表达式来执行以下操作:

我有这个字符串:123.45.678.7,我需要替换第二个中的所有 (.) 字符。结果将是 123.456787

¿ 任何人都可以帮助我吗?

4

5 回答 5

1
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
于 2013-07-22T17:03:23.317 回答
0

只需创建一个函数...

function removeAllButFirst(myParam)
{
  var numReplaces = 0;
  var retVal = myParam.replace(/\./g, function(allMatch, currMatch) { 
    return ++numReplaces==1 ? '.' : ''; });
  return retVal;
}
于 2013-07-22T16:26:04.707 回答
0

刚刚翻找了一下,在网上找到了这个 - 它相当粗糙,但可以完成这项工作......

retVal = retVal.replaceFirst(".","$");
retVal = retVal.replaceAll(".","");
retVal = retVal.replaceFirst("$",".");

这确实假设您的输入中没有任何 $'s - 如果您确实选择了不同的字符。它不是很好,在 Java 上可能有一个更好的单一正则表达式,使用 LookBehinds 之类的东西,但我不是 Java 开发人员,所以不能说。

于 2013-07-22T16:50:18.970 回答
0

此代码使用正则表达式匹配所有句点,然后将第一个小数点放回字符串中。

以下是测试结果:

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);
    }

}
于 2013-07-22T17:03:34.413 回答
0

这个正则表达式也应该工作:

String str = "123.45.678.9";
String repl = str.replaceAll("([^.]*\\.[^.]*|[^.]*)\\.", "$1");
// repl = 123.456789
于 2013-07-22T20:39:41.283 回答