ReplaceAll with regex 正在删除一个不需要的额外字符 Java
ReplaceAll with regex is removing one extra char which dont want to in 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
我想用 "that" 词替换所有 "this" 词,除了 "this" 以“.”开头。所以这里的“.this”不应该被替换,其他的都应该被替换。我写了下面的代码。
replaceAll("[^\.]"+"this", "that")
这并没有替换 .this,但问题是它正在考虑在字符串之前多一个字符。
例如:jjathis 就像 jjthat 一样来了。但应该是jjathat。
为什么 replaceall 在开始时改变了一个额外的字符?解决方案应该是什么?
请帮忙。
也许,
(?<!\.)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
如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些示例输入。
我有如下文字
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
我想用 "that" 词替换所有 "this" 词,除了 "this" 以“.”开头。所以这里的“.this”不应该被替换,其他的都应该被替换。我写了下面的代码。
replaceAll("[^\.]"+"this", "that")
这并没有替换 .this,但问题是它正在考虑在字符串之前多一个字符。
例如:jjathis 就像 jjthat 一样来了。但应该是jjathat。
为什么 replaceall 在开始时改变了一个额外的字符?解决方案应该是什么?
请帮忙。
也许,
(?<!\.)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
如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些示例输入。