java正则表达式模式匹配

时间:2016-01-18 20:06:35

标签: java regex

我有几个字符串

  1. "abcd: 1234"
  2. "abcd : 1234"
  3. "abcd : 1234"
  4. "abcd: 1234"
  5. "abcd 1234"
  6. "abcd : abcd dgdfgdf abcd dgdsfsdf"
  7. 请帮助java代码用xyz替换abcd而不删除前4个字符串中的空格并保留第5个字符串,而第6个只用abcd的第一个实例替换为1234,因为要匹配的模式是abcd :

3 个答案:

答案 0 :(得分:0)

试试这个:

public class Test {     
    public static void main(String[] args) {
        String[] saveSpace = {
            "abcd: 1234",
            "abcd : 1234",
            "abcd : abcd dgdfgdf abcd dgdsfsdf",
            "abcd 1234",
            "asdasdas abcd abcd: sdfdsf"
        };

        String regex = "abcd(?!\\s*\\w)(?=(?:[^:]*\\:){1}[^:]*$)";
        String replace = "xyz";

        for(int i = 0; i<saveSpace.length; i++) {
            saveSpace[i] = saveSpace[i].replaceFirst(regex, replace);
            System.out.println(saveSpace[i]);
        }
    }
}

输出:

xyz: 1234
xyz : 1234
xyz : abcd dgdfgdf abcd dgdsfsdf
abcd 1234
asdasdas abcd xyz: sdfdsf

它应匹配abcd后跟任意数量的空格,;[a-zA-Z0-9]

中没有字符

答案 1 :(得分:0)

所以这是请求的快速回答,因为其他人似乎更喜欢讨论代码......

String input[] = {
    "abcd: 1234",
    "abcd : 1234",
    "abcd    : 1234",
    "abcd:       1234",
    "abcd 1234",
    "abcd : abcd dgdfgdf abcd dgdsfsdf",
    "abcd abcd: dgdfgdf abcd dgdsfsdf",
    "sdsdsdsad abcd abcd : dgdfgdf abcd dgdsfsdf"
};

for (String s: input) {
    String output = s.replaceFirst("^(.*)abcd((?=\\s*:).*)$", "$1xyz$2");
    System.out.println(output);
}   

这会给你:

xyz: 1234
xyz : 1234
xyz    : 1234
xyz:       1234
abcd 1234
xyz : abcd dgdfgdf abcd dgdsfsdf
abcd xyz: dgdfgdf abcd dgdsfsdf
sdsdsdsad abcd xyz : dgdfgdf abcd dgdsfsdf

希望这有助于(并结束讨论)。

答案 2 :(得分:-1)

试试这个:

public void checkString(String s) {
    if(s.contains(":"))
        s.replaceFirst("abcd", "xyz");
}

然后调用checkString并插入每个字符串。

checkString(string1)
checkString(string2)
...

String类中的replaceFirst函数将第一个字符串的第一个出现替换为第二个字符串。 contains函数检查字符串是否包含字符串&#34;:&#34; (在这种情况下)并返回true(如果存在)。