在 C# 中将具有给定形式的子字符串替换为另一个

Posted

技术标签:

【中文标题】在 C# 中将具有给定形式的子字符串替换为另一个【英文标题】:Replacing a substring with given form with another in C# 【发布时间】:2014-11-07 13:48:28 【问题描述】:

给定两个字符串 s1s2 我想替换任何出现 形式为s1s3s2s1s4s2

我的用例是替换 "\textbf\atext\" 形式的子字符串 "\**atext**"

如何在 C# 中实现这一点?

【问题讨论】:

我真的不明白你想在这里实现什么。 s1s4s2atext 问题有何关系? @StevenV - 在这种情况下 s1=\textbf\,s2=\,s4=s3 找到 s1*s2 的正则表达式会起作用吗?找到 s1 和 s2 后,您可以重建字符串。 @SteveGuidi - 如果我能得到 s1 的起始索引就足够了 有一种语法可以使正则表达式中的标记匹配为“组”——现在不记得了。但是,一旦完成,Group 类型将给出该组在字符串中的匹配位置的索引。 msdn.microsoft.com/en-us/library/… 【参考方案1】:

基本上:取模式(包含3组),用模式中的第二组替换instr。

    private string MyReplace(string inStr, string leaveStr)
    
        string pattern = @"(.*?)(" + leaveStr + ")(.*)";
        string repl = @"*$2*";

        Regex rgx = new Regex(pattern);
        return rgx.Replace(inStr, repl);

    

    string x = MyReplace(@"\textbf\atext\", "atext");
    x = MyReplace(@"\textbf\1\", "1");

完整字符串 - 组零 ($0)

(.*?) - 第一组 ($1)

(atext) - 第二组 ($2)

(.*) - 第三组 ($3)

【讨论】:

谢谢。在我的问题中,“atext”可以改变,但我仍然想以类似的方式替换它。例如将 "\textbf1" 转换为 "*1*" 我该怎么做? 输入字符串由你决定。如果你使用 "\textbf1" 作为 instr,使用 "(.*?)(1)(.*)" 作为模式,你会得到结果。 不太确定我是否理解对此的反对意见。 我也不是 :-D 也许因为它不是一个完整的解决方案,只是它的主要部分。我编辑以获得复制粘贴的完整解决方案。 :-P

以上是关于在 C# 中将具有给定形式的子字符串替换为另一个的主要内容,如果未能解决你的问题,请参考以下文章

在 App Store 中将一个应用替换为另一个

如何在条件中将一列值替换为另一列值[重复]

java 在最小steps.java中将给定的整数转换为另一个整数

如何从 UINavigationController 弹出视图并在一次操作中将其替换为另一个视图?

在 C# 中将字符串中的“\\”替换为“\”

如何在 C# 中将对象数组向上转换为另一种类型的对象数组?