Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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#_.net_Regex_Replace - Fatal编程技术网

C# 正则表达式-仅查找和替换完整字符串(不包括部分匹配)

C# 正则表达式-仅查找和替换完整字符串(不包括部分匹配),c#,.net,regex,replace,C#,.net,Regex,Replace,我不太擅长正则表达式,但也许有一个简单的方法来完成这个任务 我得到了一个字符串,比如“bla@a bla@a1 bla” 我还得到了像{“a”,“a2”},{“a1”,“a13”},我需要将@a替换为@a2,将@a1替换为@a13 问题是当我使用String.Replace并查找@a时,它也会替换@a1,但不应该。我需要它完全匹配@a,并避免在其他地方部分匹配它 注意:给定的字符串也可以是括号、逗号、点等。但是,对将始终是[a-z]*[0-9]+ 请帮我用regex替换 干杯使用\b: @a\b

我不太擅长正则表达式,但也许有一个简单的方法来完成这个任务

我得到了一个字符串,比如
“bla@a bla@a1 bla”

我还得到了像
{“a”,“a2”}
{“a1”,“a13”}
,我需要将
@a
替换为
@a2
,将
@a1
替换为
@a13

问题是当我使用
String.Replace
并查找
@a
时,它也会替换
@a1
,但不应该。我需要它完全匹配
@a
,并避免在其他地方部分匹配它

注意:给定的字符串也可以是括号、逗号、点等。但是,对将始终是
[a-z]*[0-9]+

请帮我用regex替换

干杯

使用
\b

@a\b
\b
是零宽度字边界。基本上这意味着它匹配从单词字符(字母、数字、下划线)到非单词字符(其他所有字符)的转换,或者反之亦然,但不“消耗”输入的任何部分(即零宽度部分)

例如:

string s1 = "bla @a bla @a1 bla ";
string s2 = Regex.Replace(s1, @"@a\b", "foo");
Console.WriteLine(s2);
输出:

bla foo bla @a1 bla

使用具有查找和单词边界的正则表达式:

Regex regex = new Regex(string.Format(@"(?<!\w)@{0}\b", from));
string result = regex.Replace(input, "@" + to)

空间不是唯一的separators@vittore:那么第二种方法在这种情况下不起作用。我会坚持使用正则表达式。但是它是否可以替换
a1
,而不替换
a11
?@vittore,是的。但是你为什么不自己测试一下呢?
string result = string.Join(" ",
    input.Split(' ')
         .Select(x => x == "@" + from ? "@" + to : x)
         .ToArray());