使用正则表达式在C#中编辑字符串
我刚刚开始使用正则表达式,所以忍受我的术语。 我有一个在字符串上正常工作的正则表达式模式。 该字符串可以是格式“text [pattern] text”。 因此,我也有一个否定第一种模式的正则表达式模式。 如果我打印出每场比赛的结果,所有内容都能正确显示。
我遇到的问题是我想将文本添加到字符串中,它会更改正则表达式MatchCollection中匹配的索引。 例如,如果我想在“td”匹配“/ td”“标签中包含找到的匹配项,我有以下代码:
Regex r = new Regex(negRegexPattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
MatchCollection mc = r.Matches(text);
if (mc.Count > 0)
{
for (int i = 0; i < mc.Count; i++)
{
text = text.Remove(mc[i].Index, mc[i].Length);
text = text.Insert(mc[i].Index, "<td>" + mc[i].Value + "</td>");
}
}
这对第一场比赛非常有用。 但正如你所期望的那样,mc [i] .Index不再有效,因为字符串已经改变。 因此,我试图在for循环中搜索匹配数量(mc.Count)的单个匹配项,但随后我一直找到第一个匹配项。
所以希望不要引入更多的正则表达式来确保它不是第一次匹配,并且将所有内容保存在一个字符串中,是否有人对我如何实现这一目标有任何意见? 感谢您的输入。
编辑:谢谢大家的回复,我很欣赏他们。
它可以像下面这样简单: -
string newString = Regex.Replace("abc", "b", "<td>${0}</td>");
结果在a<td>b</td>c
。
在你的情况下: -
Regex r = new Regex(negRegexPattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
text = r.Replace(text, "<td>${0}</td>");
将所有发生的negRegexPattern替换为由td元素包围的匹配内容。
虽然我同意上面的Regex.Replace答案是最好的选择,但回答你提出的问题,如何从最后一场比赛换到第一场比赛。 这样你的字符串增长超出了“以前的”匹配,所以较早的匹配索引仍然有效。
for (int i = mc.Count - 1; i > 0; --i)
static string Tabulate(Match m)
{
return "<td>" + m.ToString() + "</td>";
}
static void Replace()
{
string text = "your text";
string result = Regex.Replace(text, "your_regexp", new MatchEvaluator(Tabulate));
}
链接地址: http://www.djcxy.com/p/92825.html