在 C# 中将具有给定形式的子字符串替换为另一个
Posted
技术标签:
【中文标题】在 C# 中将具有给定形式的子字符串替换为另一个【英文标题】:Replacing a substring with given form with another in C# 【发布时间】:2014-11-07 13:48:28 【问题描述】:给定两个字符串 s1
和 s2
我想替换任何出现
形式为s1s3s2
和s1s4s2
我的用例是替换 "\textbf\atext\"
形式的子字符串
"\**atext**"
如何在 C# 中实现这一点?
【问题讨论】:
我真的不明白你想在这里实现什么。s1s4s2
与 atext
问题有何关系?
@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# 中将具有给定形式的子字符串替换为另一个的主要内容,如果未能解决你的问题,请参考以下文章
java 在最小steps.java中将给定的整数转换为另一个整数