C# 替换意外行为
代码如下:C# 替换意外行为,c#,.net,regex,C#,.net,Regex,代码如下: var x = "Word1 Word2 @aaa|sss Word3 Word4 @aaa|sss Word5"; var s = Regex.Replace(x, "\\b@aaa|sss\\b", "55", RegexOptions.Singleline); 预期产出: 单词1单词2 55单词3单词4 55单词5 实际: 单词1单词2@aaa | 55单词3单词4@aaa | 55单词5 我相信,这是件愚蠢的事。。。为什么? 这个问题不是关于“特殊人物”。这
var x = "Word1 Word2 @aaa|sss Word3 Word4 @aaa|sss Word5";
var s = Regex.Replace(x, "\\b@aaa|sss\\b", "55", RegexOptions.Singleline);
预期产出:
单词1单词2 55单词3单词4 55单词5
实际:
单词1单词2@aaa | 55单词3单词4@aaa | 55单词5
我相信,这是件愚蠢的事。。。为什么?
这个问题不是关于“特殊人物”。这相当于不理解问题所在。上面的问题没有具体的例子。这实际上是正确的行为,你可以用在线正则表达式网站测试 这是您正在搜索的正则表达式字符串:“@aaa\| sss”(您可能还需要转义\) 您需要避开|符号,因为它通常充当“或”符号。
同时删除单词边界,因为|不能是单词的一部分。您的模式不起作用,原因有两个:
与边界处的空格不匹配。空格字符和\b@
字符都是非单词字符。它们之间没有单词边界,所以不能使用单词边界来匹配。一种选择是@
(?,尽管上面的答案是有效的。对于新手来说,简单的解决方案是用“/”替换“或”(|)和\并使用“/gi”替换所有。下面是演示
匹配单词边界,但\b
不是单词字符,因此空格和@
之间的位置不是单词边界。此外,如果要匹配文字管道而不是字符,则应转义@
alternate@CertainPerformance好主意。我需要以某种方式将此
包含在此se中arch.所以…看起来应该这样:@
太好了!但是如果我真的不关心@“@aaa\| sss\b”
之前的内容。我只关心我有@
,我只关心@aaa\|…
之后的内容是一个单词。因此,我应该避开
,对吗?例如@@aaa\\124; sss\b”
应该可以then@T.S.是的,没错。谢谢你,先生!很高兴有像你这样的大师。我今天晚些时候会研究这个技巧。很有趣。同时,请投票支持重新打开这个问题。谢谢我的text@aaa|xxxxx….
(?<=\s)@aaa\|sss\b
(?:(?<=\s)|\b)@aaa\|sss\b
var str = "Word1 Word2 @aaa|sss Word3 Word4 @aaa|sss Word5"; str = str .replace( /@aaa\|sss/gi, "55" )