例如,我的组织字符串是:
CCC=123
CCC=DDDDD
CCC=EE
CCC=123
CCC=FFFF
我希望所有不等于“CCC = 123”的东西都改为“CCC = AAA”
结果是:
CCC=123
CCC=AAA
CCC=AAA
CCC=123
CCC=AAA
如何在正则表达式中执行此操作?
如果我希望将所有等于“CCC = 123”的内容更改为“CCC = AAA”,则很容易实现:
(AAA [\ t] * =)(123)
答案 0 :(得分:1)
您可以使用否定前瞻:
public static void main(String[] args)
{
String foo = "CCC=123 CCC=DDD CCC=EEE";
Pattern p = Pattern.compile("(CCC=(?!123).{3})");
Matcher m = p.matcher(foo);
String result = m.replaceAll("CCC=AAA");
System.out.println(result);
}
输出:
CCC = 123 CCC = AAA CCC = AAA
这些是零宽度,非捕获,这就是为什么你必须添加.{3}
来捕获要替换的不匹配字符的原因。
答案 1 :(得分:1)
s = s.replaceAll("(?m)^CCC=(?!123$).*$", "CCC=AAA");
(?m)
激活MULTILINE模式,允许^
和$
分别匹配行的开头和结尾。前瞻中的$
可确保您不会跳过仅部分匹配的内容,例如CCC=12345
。最后的$
并不是必需的,因为.*
在任何情况下都会占用该行的其余部分,但它有助于传达您的意图。