替换每场比赛,但第一场比赛

时间:2013-07-22 15:40:59

标签: java regex

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

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

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

只需创建一个功能......

function removeAllButFirst(myParam)
{
  var numReplaces = 0;
  var retVal = myParam.replace(/\./g, function(allMatch, currMatch) { 
    return ++numReplaces==1 ? '.' : ''; });
  return retVal;
}

答案 2 :(得分:0)

刚刚进行了翻找并在网上发现了这一点 - 它相当粗糙,但是可以胜任......

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

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

答案 3 :(得分: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);
    }

}

答案 4 :(得分:0)

这个正则表达式也应该有效:

String str = "123.45.678.9";
String repl = str.replaceAll("([^.]*\\.[^.]*|[^.]*)\\.", "$1");
// repl = 123.456789