为了账号安全,请及时绑定邮箱和手机立即绑定

ReplaceAll 当它不是字母字符时

ReplaceAll 当它不是字母字符时

慕妹3146593 2023-03-23 15:42:28
我需要替换字符串中所有出现的单词,当它位于非字母字符(数字、空格等)之间或字符串的开头或结尾时 $0。但是,当我使用 replaceAll 时,我的 Regex 模式似乎不起作用。我尝试了几种在网上找到的解决方案,例如 Pattern.quote,但该模式似乎不起作用。但是,它在https://regexr.com/上完美运行public static final String REPLACE_PATTERN = "(?<=^|[^A-Za-z])(%s)(?=[^A-Za-z]|$)";String patternToReplace = String.format(REPLACE_PATTERN, "a");inputString = inputString.replaceAll(Pattern.quote(patternToReplace), "$0");例如,对于字符串和单词“a”:a car4is a5car我希望输出是:$0 car4is $05car
查看完整描述

4 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

只需从更改inputString.replaceAll(Pattern.quote(patternToReplace), "$0");为inputString.replaceAll(patternToReplace, "\\$0");


我已经用这段代码测试过:


public static final String REPLACE_PATTERN = "(?<=^|[^A-Za-z])(%s)(?=[^A-Za-z]|$)";

String patternToReplace = String.format(REPLACE_PATTERN, "a");

inputString = inputString.replaceAll(patternToReplace, "\\$0");

System.out.println(inputString);

输出 :


$0 car4is $05car

希望这对你有帮助:)


查看完整回答
反对 回复 2023-03-23
?
largeQ

TA贡献2039条经验 获得超7个赞

你引用了错误的东西。你不应该引用模式。您应该引用"a"- 模式中应该按字面意义对待的部分。

String patternToReplace = String.format(REPLACE_PATTERN, Pattern.quote("a"));

如果您永远不会在 的第二个参数中放置任何其他字母format,那么您根本不需要quote,因为字母在正则表达式中没有特殊含义。

此外,$用作替换时具有特殊含义,因此您需要对其进行转义:

inputString = inputString.replaceAll(patternToReplace, "\\$0");


查看完整回答
反对 回复 2023-03-23
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

Pattern.quote()返回正则表达式文字,中间的所有内容都被视为文本

您应该使用Matcher替换所有出现的字符串。除此之外,正如@Donat指出的那样,$0它被视为正则表达式变量,因此您需要对其进行转义。

inputString = Pattern.compile(patternToReplace).matcher(inputString).replaceAll("\\$0");



查看完整回答
反对 回复 2023-03-23
?
SMILET

TA贡献1796条经验 获得超4个赞

当你想用替换字符串的匹配部分时"$0",你必须写它
"\\$0"。这是因为$0有一个特殊的含义:匹配字符串。所以你自己替换字符串。

查看完整回答
反对 回复 2023-03-23
  • 4 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信