否定正则表达式

时间:2014-04-01 11:24:46

标签: regex regex-negation

如何否定正则表达式[a-zA-Z]+[0-9]*?即,从字符串“12-mar-14, 21, 123_4, Value123, USER, 12/2/13'开始,我需要匹配Value123USER以外的值。有人可以解释一下吗?

我正在尝试将Java中的字符串'12-mar-14, 21, 123_4, Value123, USER, 12/2/13'替换为'%Value123%USER%'。任何与[a-zA-Z]+[0-9]*不匹配的内容都应替换为%

一个正则表达式,它会为相应的输入提供以下输出。

输入:'12-mar-14, 21, 123_4, Value123, USER, 12/2/13'

输出:'%Value123%USER%'

输入:'12-mar-14, 21, 123_4'

输出:'%'

输入:'New, 12-Mar-14, 123, dat_123, Data123'

输出:'%New%Data123%'

1 个答案:

答案 0 :(得分:1)

使用此方法:

//********** MODIFIED *************//
public static void getSentence(String line) {
    String text[] = line.split(",");
    String res = "";

    for (int i = 0; i < text.length; i++) {
        String word = text[i].trim();
        if (word.matches("[a-zA-Z]+[0-9]*")){
            if (!"".equals(res)) 
                res = res + "%";
            res = res + word;
        }
    }
    if ("".equals(res)) 
        res = "%";
    else
        res = "%" + res + "%";
    System.out.println(res);
}

...

this.getSentence("New, 12-Mar-14, 123, dat_123, Data123");
this.getSentence("12-mar-14, 21, 123_4, Value123, USER, 12/2/13");

输出:

%New%Data123%
%Value123%USER%