【问题标题】:C# string replace if exact match is found如果找到完全匹配,则 C# 字符串替换
【发布时间】:2019-05-17 14:47:45
【问题描述】:

只有当string 具有完全匹配时,我才需要替换。我该怎么做?

如果它匹配字符串的任何部分,它会替换字符串表达式。

string strExpression  = "hey! Hello World. SpecialDayForMe";

strExpression = strExpression .Replace("SpecialDay", "ABC") ;

strExpression 的结果是"hey! Hello World. ABCForMe"

我希望它仅在字符串中匹配 SpecialDay 而不是部分匹配时匹配。我该怎么做?

注意:如果我可以在不使用 REGEX 的情况下做到这一点,那就太好了。

【问题讨论】:

  • 什么是完全匹配?是Specialday;forMe 还是special-day.ForMe
  • 请明确澄清您的问题 - 谈论“完全匹配”听起来像是您在区分大小写不同的匹配等。“嘿!Hello World.SpecialDayForMe”确实包含 “特殊日子”。我相信你真的对它是否匹配一个完整的单词感兴趣。为此,您需要提出详细的要求。您希望连字符和其他标点符号如何表现?您是否有在您尝试匹配的令牌之前/之后允许的字符的精确列表?
  • 有什么特别的原因你想在没有正则表达式的情况下这样做吗?我认为没有另一种方法不涉及自己进行一些解析,基本上是为此目的构建自己的小型正则表达式引擎。

标签: c# string


【解决方案1】:

当替换整个单词时,尝试使用正则表达式\b标记单词的边界):

 using System.Text.RegularExpressions;

 ...

 string strExpression  = "hey! Hello World. SpecialDayForMe";
 string toFind = "SpecialDay";

 strExpression = Regex.Replace(
   strExpression, 
  @"\b" + Regex.Escape(toFind) + @"\b", // Regex.Escape to be on the safe side
   "ABC");

It matches“Hello world。SpecialDay for me”以及“SpecialDay”和“SpecialDay。”。 p>

【讨论】:

  • OP 专门要求 no regex
  • 使用 \b 也匹配“SpecialDay-forMe”,在瑞典语中,在这种情况下,“-”不会算作单词边界——因此,它可能必须进行本地化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 2013-05-21
  • 2020-01-11
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多