当前位置: 首页 > 面试题库 >

如何确保replaceAll将替换整个单词而不是subString

公良育
2023-03-14
问题内容

我有字典的输入。迭代字典以替换key文本中的from字典。但是replaceAll功能也取代了subString

如何确保它与整个单词匹配(整体而不是subString

String text= "Synthesis of 1-(2,6-dimethylbenzyl)-1H-indole-6-carboxylic acid [69-3] The titled compound (883 mg) sdvfshd[69-3]3456 as a white solid was prepared"

dictionary= {[69-3]=1-(2,6-dimethylbenzyl)-1H-indole-6-carboxylic acid }

for(Map.Entry<String, String> entry : dictionary.entrySet()){

        text=text.replaceAll("\\b"+Pattern.quote(entry.getKey())+"\\b", entry.getValue());

}

问题答案:

replaceAll 以正则表达式为参数。

在正则表达式,你必须字边界:\b(使用\\b在一个字符串)。它们是确保您匹配单词而不是单词一部分的最佳方法:"\\bword\\b"

但是在您的情况下,您不能使用单词边界,因为您不是在寻找单词([69-3]不是单词)。

我建议这样:

text=text.replaceAll("(?=\\W+|^)"+Pattern.quote("[69-3]")+"(?=\\W+|$)", ...

想法是匹配字符串结尾或不是单词的东西。但我不能确保这将是适合您的解决方案:必须调整这种模式,才能知道确切的完整用例。

请注意,如果您所有的键都遵循类似的模式,则可能有比遍历字典更好的解决方案,例如,可以使用"(?=\\W+|^)\\[\\d+\\-\\d+\\](?=\\W+|$)"



 类似资料:
  • 问题内容: 我有一个,并且效果很好,直到我在输入中添加了一个空格。例如,如果我列出了许多历史事件(英国战役(1940年),大爆炸战役(1944年),[插入大量战斗],拿破仑的致命游行(1812年),[插入许多其他历史事件]) 。 当我输入“ ”或“ ”时,我会得到所有战斗的列表(尽管似乎有最大战斗),而当我输入“ ”时,结果会出现。 但是,当我输入时,该列表为空,与输入时我没有得到任何匹配的原因相

  • 我正在使用以替换子字符串 我现在面临的问题是,只有在字符串替换不支持的情况下,我才想要替换整个单词。< br >因为我必须替换非常非常大的字符串,可能以GB为单位。与字符串替换相比,正则表达式非常慢。< br >例如:text: - 正则表达式将时间缩短了近 100 倍(https://medium.com/codezillas/golang-replace-vs-regexp-de4e48482

  • 问题内容: 我想用php代替完整的单词 示例:如果我有 我用 新文本应如下所示 新hello1您好,Helloz PHP返回 NEW hello1 hello,NEWz 谢谢。 问题答案: 您要使用正则表达式。该单词边界匹配。 如果包含UTF-8文本,则必须添加Unicode修饰符“ u”,以便不会将非拉丁字符误解为单词边界:

  • 问题内容: 我知道如何使用substr函数,但是这样会很高兴在单词中间插入一个字符串。我希望字符串在单词的结尾处结束,我该怎么做?它会涉及正则表达式吗?任何帮助,非常感谢。 到目前为止,这就是我所拥有的。只是SubStr … 干杯 问题答案: 可以使用正则表达式来完成,类似这样的事情将从字符串开头到单词边界最多包含260个字符: 另外,您可以使用自动换行功能将$ body分成几行,然后提取第一行。

  • 问题内容: 我希望将文本“REPLACEME”替换为我的StringBuffer符号。当我打印符号时,它是一个有效的字符串。当我打印查询时,它仍然具有文本REPLACEME而不是符号。为什么? 问题答案: 更改 至: Java中的字符串被设计为不可变的。 这就是为什么不能替换当前字符串 中 的字符,因此它必须返回替换了字符的 新 字符串。 此外,如果你想简单地替换文字,不需要正则表达式的语法支持使

  • 问题内容: 通过这个代码,我试图取代确切的词用。但是,如果运行此命令,它将仅在我希望打印时打印,这与包含它的单词不同。我怎样才能解决这个问题?谢谢 问题答案: 使用带有单词边界 的正则表达式: 边界符号的反斜杠必须转义,因此为双反斜杠。