Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 子串交替替换_C#_String_Substring_Markdown - Fatal编程技术网

C# 子串交替替换

C# 子串交替替换,c#,string,substring,markdown,C#,String,Substring,Markdown,我想知道是否有任何方法可以替换字符串中的子字符串,但可以在字符串之间交替替换它们。也就是说,匹配字符串的所有出现处,“**”,并将第一个出现处替换为“”,将下一个出现处替换为“”(然后重复该模式) 输入如下:“这是一个带有**多个**强标记的句子,在输出时**强**” 返回的输出将是:“这是一个带有多个strong标记的句子,在输出时将strong”您可以使用正则表达式的重载。替换接受匹配计算器的委托: using System.Text.RegularExpressions; class P

我想知道是否有任何方法可以替换字符串中的子字符串,但可以在字符串之间交替替换它们。也就是说,匹配字符串的所有出现处,
“**”
,并将第一个出现处替换为
,将下一个出现处替换为
(然后重复该模式)

输入如下:
“这是一个带有**多个**强标记的句子,在输出时**强**”


返回的输出将是:
“这是一个带有多个strong标记的句子,在输出时将strong

您可以使用
正则表达式的重载。替换
接受
匹配计算器的
委托:

using System.Text.RegularExpressions;

class Program {
    static void Main(string[] args) {
        string toReplace = "This is a sentence with **multiple** strong tags which will be **strong** upon output";
        int index = 0;
        string replaced = Regex.Replace(toReplace, @"\*\*", (m) => {
            index++;
            if (index % 2 == 1) {
                return "<strong>";
            } else {
                return "</strong>";
            }
        });
    }
}
使用System.Text.regular表达式;
班级计划{
静态void Main(字符串[]参数){
string toReplace=“这是一个带有**多个**强标记的句子,输出时将为**强**”;
int指数=0;
字符串替换=Regex.Replace(toReplace,@“\*\*”,(m)=>{
索引++;
如果(索引%2==1){
返回“”;
}否则{
返回“”;
}
});
}
}

最简单的方法是为
**(内容)**
实际使用regex,而不仅仅是
**
。然后将其替换为
(内容)
,就完成了

您可能还想在上查看MarkdownSharp,因为这确实是您想要使用的功能。

尝试一下

var sourceString = "This is a sentence with **multiple** strong tags which will be **strong** upon output";
var resultString = sourceString.Replace(" **","<strong>");
resultString = sourceString.Replace("** ","</strong>");
var sourceString=“这是一个包含**多个**强标记的句子,在输出时将**强**”;
var resultString=sourceString.Replace(“**”和“”);
resultString=sourceString.Replace(“**”和“”);

干杯,

我认为您应该使用正则表达式来匹配模式并替换它,这很简单。

您可以使用正则表达式来解决此问题:

string sentence = "This is a sentence with **multiple** strong tags which will be **strong** upon output";

var expression = new Regex(@"(\*\*([a-z]+)\*\*)");

string result = expression.Replace(sentence, (m) => string.Concat("<strong>", m.Groups[2].Value, "</strong>"));
string-session=“这是一个包含**多个**强标记的句子,输出时将**强**”;
var表达式=新正则表达式(@“(\*\*([a-z]+)\*\*)”;
字符串结果=表达式.Replace(句子,(m)=>string.Concat(“”,m.Groups[2]。值“”);

这种方法会自动处理语法错误(想想像
这个**字应该是**强**
)这样的字符串。

你可以在循环中使用带有起始索引的
IndexOf
。@CodeInChaos我真的没有经常使用IndexOf,我将对此进行研究,但您是否有任何实现方法?这显然不符合他的规范。如果空格不存在,这将导致混乱,而且没有理由这样做。这适用于我指定的输入,但如果
**
的起始组位于字符串的开头,你有问题这是最干净的方法,+1。我看过MarkDownSharp,但我只想输入粗体,而不是整个功能。我可能会开始使用它,当它成为更多的要求often@Paolo我只是再次使用了它,并意识到如果您将
if
语句替换为
返回索引%2==1,代码可以缩短,并且看起来更好一些?“”:“答案过于简单化。请提供尚未提供的代码示例。