我是Regex的新手,但我认为我的问题应该用它来解决。基本上,我想用“dog”替换字符串中的空格,只要“cat”或“bird”或“dog”不在之前或之后。
示例:
Good Dog = Good Dog
Large Brown = Large Dog Brown
Cat Ugly = Cat Ugly
因此只会修改第二个字符串。我可以轻松地处理这样的字符串替换等,但我很想知道这是否应该在正则表达式中完成。
答案 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