我有这个字符串:
元素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 ++搜索来定位所需的单词。 这里发生了什么? 感谢
答案 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");