Java Regex - 空格和匹配单词

标签 java regex string

我是正则表达式的新手,但我认为我的问题应该使用它来解决。基本上,我想用“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/

相关文章:

java - 有没有读取/var/spool/mail/files的库?

regex - 模式 token 生成器转换为 token 字符串,例如222 * abc ** xyz ****** 332434为222,abc,xyz,332434

javascript - 将 Java 日期字符串转换为 javascript 日期

Java模拟键盘

java - 如何找出正在运行的 AsyncTask?

java - 如何使用for循环一次运行多个登录?

java - Spring Boot 从我的模型和存储库类创建一个库

php - 如何使用preg_match检查我的字符串是否包含空格?

regex - 从 Notepad++ 文件中删除行号

c - 在c程序中接收后字符串以/UN结尾?