regex 将string替换为匹配正则表达式的一部分

xzlaal3s  于 2023-03-13  发布在  其他
关注(0)|答案(6)|浏览(142)

我有一个很长的字符串。我想用匹配的regex(group)的一部分替换所有的匹配。
例如:

String = "This is a great day, is it not? If there is something, THIS IS it. <b>is</b>".

我想把所有的单词"is"替换成,比如说,"<h1>is</h1>",大小写应该和原来的一样,所以我想要的最后一个字符串是:

This <h1>is</h1> a great day, <h1>is</h1> it not? If there <h1>is</h1> something, 
THIS <h1>IS</h1> it. <b><h1>is</h1></b>.

我正在尝试的正则表达式:

Pattern pattern = Pattern.compile("[.>, ](is)[.<, ]", Pattern.CASE_INSENSITIVE);
taor4pac

taor4pac1#

Matcher类通常与Pattern一起使用。使用Matcher.replaceAll()方法替换字符串中的所有匹配项

String str = "This is a great day...";
Pattern p = Pattern.compile("\\bis\\b", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(str);
String result = m.replaceAll("<h1>is</h1>");

**注意:**使用\b regex命令将匹配单词边界(如空格)。这有助于确保仅匹配单词“is”,而不匹配包含字母“i”和“s”的单词(如“island”)。

iovurdzv

iovurdzv2#

就像这样:

str = str.replaceAll(yourRegex, "<h1>$1</h1>");

$1指的是正则表达式中第1组捕获的文本。

1tu0hz3e

1tu0hz3e3#

Michael的答案更好,但是如果你碰巧只想把[.>, ][.<, ]作为边界,你可以这样做:

String input = "This is a great day, is it not? If there is something, THIS IS it. <b>is</b>";
Pattern p = Pattern.compile("(?<=[.>, ])(is)(?=[.<, ])", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
String result = m.replaceAll("<h1>$1</h1>");
knpiaxh1

knpiaxh14#

yourStr.replaceAll("(?i)([.>, ])(is)([.<, ])","$1<h1>$2</h1>$3")

(?i)表示忽略情况;用括号将您想要重用的所有内容 Package 起来,用$1、$2和$3重用它们,将它们连接成您想要的内容。

7hiiyaii

7hiiyaii5#

这可能是一个后期添加,但如果有人正在寻找这个像搜索thing,他也需要Something太被视为结果

Pattern p = Pattern.compile("([^ ]*)is([^ \\.]*)");
String result = m.replaceAll("<\h1>$1is$2<\/h1>");

也将产生Something

o2rvlv0m

o2rvlv0m6#

只需使用反向引用即可。

"This is a great day, is it not? If there is something, THIS IS it. <b>is</b>"
  .replaceAll("[.>, ](is)[.<, ]", "<h1>$2</h1>");

应该可以。

相关问题