加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何互相替换两个或多个字符串?

发布时间:2020-12-15 04:34:26 所属栏目:百科 来源:网络整理
导读:我需要使用C#替换字符串的某些部分. 我只能找到一个关于如何实现这个 here的类似问题,但它是PHP. 我的情况涉及一个Dictionary [string,string],它包含要替换的对,如: 狗,猫 猫,老鼠, 老鼠,猛禽 我有一个值为的字符串: "My dog ate a cat which once ate a
我需要使用C#替换字符串的某些部分.
我只能找到一个关于如何实现这个 here的类似问题,但它是PHP.

我的情况涉及一个Dictionary [string,string],它包含要替换的对,如:

>狗,猫
>猫,老鼠,
>老鼠,猛禽

我有一个值为的字符串:

"My dog ate a cat which once ate a mouse got eaten by a raptor"

我需要一个函数来得到这个:

"My cat ate a mouse which once ate a raptor got eaten by a raptor"

如果我枚举字典并按顺序调用string.Replace,我得到这个:

"My raptor ate a raptor which once ate a raptor got eaten by a raptor"

如果以前没有问到这一点很奇怪,(这是常识吗?)但我找不到任何东西.所以我很抱歉,如果有,我错过了.

解决方法

所以你需要的是匹配过程只发生一次.我认为正确的答案实际上是’使用正则表达式’!这是一些代码:
var replacements = new Dictionary<string,string>
                       {
                           { "do|g","cat" },{ "ca^t","mouse" },{ "mo$$use","raptor" }
                       };

var source = "My do|g ate a ca^t which once ate a mo$$use";

var regexPattern = 
    "(" + 
    string.Join("|",replacements.Keys.Select(Regex.Escape)) +
    ")";

var regex = new Regex(regexPattern);

var result = regex.Replace(source,match => replacements[match.Value]);

// Now result == "My cat ate a mouse which once ate a raptor"

我们在这里建立的模式看起来像(狗|猫|鼠标).此交替构造(|)中的每个部分都通过Regex.Escape传递,因此键中的正则字符有意义的字符(例如|,^等)不会导致问题.找到匹配项后,匹配的文本将替换为字典中的相应值.该字符串仅扫描一次,因此没有重复匹配,因为迭代string.Replace的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读