Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式替换整个单词_C#_Regex - Fatal编程技术网

C# 正则表达式替换整个单词

C# 正则表达式替换整个单词,c#,regex,C#,Regex,我有这个字符串: 元素60:80节点1 2 3 Elm 55元素60 mpc 1:999元素123 我想将字符串中的所有“Elm”、“E”和“Elem”替换为“Element”。我不想将“Node”替换为“nodeElement”,所以我需要使用单词边界来匹配整个单词 为此,我使用这个正则表达式: Regex regexElements = new Regex("\b(E|Elm|Elem)\b", RegexOptions.IgnoreCase); foreach(Match m in re

我有这个字符串:

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

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

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

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。 有趣的是,我仍然可以使用记事本++搜索找到想要的单词。 这里发生了什么?
谢谢

无需使用正则表达式:

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"); 

你需要原始的正则表达式
\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

我还建议使用更为优化的正则表达式:

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

由于我是正则表达式新手,我想了解为什么最初解决这个问题的方法不起作用。但是谢谢你的建议。是的,这将取代任何出现的
E
/
Elem
Elm
,但是,OP说他们不想取代
NodeElem
等场景。你使用的是
n.Value
而不是
m.Value
。另外,您可以将regex简化为
@“\bE(le?m)?\b”
我已经修复了发布的代码,谢谢。您可以查看Lookahead regex,以下链接可能会有所帮助,如果您使用的是Visual Studio(VS2012的版本和之后版本),只要有源文件,就可以在IDE中进行替换。崇高的文字也能做到。@James谢谢!难怪,所提供的示例代码=P有很多问题
@"\bE(le?m)?\b"