正则表达式取代整个单词

时间:2014-07-02 08:19:50

标签: c# regex

我有这个字符串:

  

元素60:80节点1 2 3 Elm 55元素60 mpc 1:999 Elem 123

我想将字符串中的所有“Elm”“E”和“Elem”替换为“Element”。我不想将“Node”替换为“NodElement”,所以我需要使用单词边界来匹配整个单词。

为此我正在使用这个正则表达式:

Regex regexElements = new Regex("\b(E|Elm|Elem)\b", RegexOptions.IgnoreCase);

foreach(Match m in regexElements.Matches(str))
{
     MessageBox.Show("Match: " + m.Value");
}

str = regexElements.Replace(str, "Element"); //str is my string

但我没有看到任何替换,也没有显示MessageBox。 有趣的是,我仍然可以使用Notepad ++搜索来定位所需的单词。 这里发生了什么? 感谢

2 个答案:

答案 0 :(得分:4)

你需要生成你的正则表达式。仅\b并不意味着单词边界(我不完全确定它的含义,但它不是文字b,所以它可能类似于退格)。因此,要么使用\\b,要么在我的评论中使用@,以便最终代码变为:

Regex regexElements = new Regex(@"\b(E|Elm|Elem)\b", RegexOptions.IgnoreCase);

foreach(Match m in regexElements.Matches(str))
{
     MessageBox.Show("Match: " + m.Value);
}

str = regexElements.Replace(str, "Element"); //str is my string

或者

Regex regexElements = new Regex("\\b(E|Elm|Elem)\\b", RegexOptions.IgnoreCase);

foreach(Match m in regexElements.Matches(str))
{
     MessageBox.Show("Match: " + m.Value);
}

str = regexElements.Replace(str, "Element"); //str is my string

我还建议这个正则表达式稍微优化一下:

@"\bE(le?m)?\b"

答案 1 :(得分:0)

没有必要使用正则表达式:

String yourString = "Element 60:80 Node 1 2 3 Elm 55 Element 60 mpc 1:999 Elem 123" ; 

yourString = yourString.Replace("Elem", "Element").Replace("E ", "Element ").Replace("Elm", "Element");