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