Java Regex - 空白&匹配单词

时间:2015-04-30 21:39:57

标签: java regex string

我是Regex的新手,但我认为我的问题应该用它来解决。基本上,我想用“dog”替换字符串中的空格,只要“cat”或“bird”或“dog”不在之前或之后。

示例:

    Good Dog = Good Dog
    Large Brown = Large Dog Brown
    Cat Ugly = Cat Ugly

因此只会修改第二个字符串。我可以轻松地处理这样的字符串替换等,但我很想知道这是否应该在正则表达式中完成。

1 个答案:

答案 0 :(得分:4)

您正在寻找lookaround机制。您的代码可能看起来或多或少像

yourString = yourString.replaceAll("(?<!cat|bird|dog)\\s(?!cat|bird|dog)"," dog ")
//                                  ^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^
//                               negative look-behind   negative look-ahead

您可以通过使用(?i)标志不区分大小写来改进此正则表达式 您还可以添加word boundaries\b)以确保匹配整个单词,而不仅仅是cataclysm部分。

演示(我还使用了non-capturing group (?:...)来提高性能):

String[] data ={ "Good Dog", "Large Brown", "Cat Ugly"};
for (String s : data){
    System.out.println(s.replaceAll("(?i)(?<!\\b(?:cat|bird|dog)\\b)\\s(?!\\b(?:cat|bird|dog)\\b)"," dog "));
}

输出:

Good Dog
Large dog Brown
Cat Ugly