我是正则表达式的新手,但我认为我的问题应该使用它来解决。基本上,我想用“dog”替换字符串中的空格,只要“cat”或“bird”或“dog”一词不在之前或之后。
示例:
Good Dog = Good Dog
Large Brown = Large Dog Brown
Cat Ugly = Cat Ugly
因此只有第二个字符串会被修改。我可以轻松处理类似字符串替换等问题,但我很想知道这是否应该在正则表达式中完成。
最佳答案
您正在寻找lookaround机制。您的代码看起来或多或少类似于
yourString = yourString.replaceAll("(?<!cat|bird|dog)\\s(?!cat|bird|dog)"," dog ")
// ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
// negative look-behind negative look-ahead
您可以通过使用(?i)
使其不区分大小写来改进此正则表达式。旗帜。
您还可以添加word boundaries ( \b
) 以确保您匹配整个单词,而不仅仅是其部分,如 <b><i>cat</i></b>aclysm
.
演示(我还使用 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
关于Java Regex - 空格和匹配单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978260/