带有regex的ReplaceAll删除了Java不想删除的一个多余的字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有regex的ReplaceAll删除了Java不想删除的一个多余的字符相关的知识,希望对你有一定的参考价值。

我的文字如下

blah blah blah test.this@gmail.com blah blah  
blah blah blah jjathis.this @gmail.com blah blah  
blah blah blah this.this.this@gmail.com blah blah this 

我想用“那个”词替换所有“这个”词,除了“这个”以“。”开头。因此,这里的“ .this”不应该被替换。我写了下面的代码。

replaceAll("[^\\.]"+"this", "that")  

这不是替换.this,但问题是它在字符串前考虑了一个额外的字符。例如:jjathis就像jjthat一样来。但是应该是jjathat。为什么replaceall在开始时要更改一个额外的char?应该怎么解决?请帮助。

答案

也许,

(?<!\\.)this

替换为

that

可能工作正常。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression

    public static void main(String[] args)

        final String regex = "(?<!\\.)this";
        final String string = "blah blah blah test.this@gmail.com blah blah  \n"
             + "blah blah blah jjathis.this @gmail.com blah blah  \n"
             + "blah blah blah this.this.this@gmail.com blah blah this ";
        final String subst = "that";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        final String result = matcher.replaceAll(subst);

        System.out.println(result);

    

输出

blah blah blah test.this@gmail.com blah blah  
blah blah blah jjathat.this @gmail.com blah blah  
blah blah blah that.this.this@gmail.com blah blah that 

[如果您想简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果需要,您还可以在this link中查看它如何与某些示例输入匹配。


以上是关于带有regex的ReplaceAll删除了Java不想删除的一个多余的字符的主要内容,如果未能解决你的问题,请参考以下文章

Java String::replaceAll 只替换第一次出现的内容(可能是错误的regex)

Java如何清除空格?

如何使用Java replaceAll(regex,replacement)方法替换字符串中的所有方括号[重复]

15Java常用类(数组工具类Arrays)基本类型包装类(Integer类)正则表达式String的split(String regex)和replaceAll(String regex, (代码片

Java中replace和replaceall的区别

String.replaceAll()方法替换字符串中的反斜杠()