C# 使用regexp将一组字符串替换为另一组字符串

C# 使用regexp将一组字符串替换为另一组字符串,c#,regex,C#,Regex,我在表格上有一个相当讨厌的字符串: <aa>b</aa><ccc>ddd</ccc> bddd 我想把所有标签都换成,我们将看到: <td>b</td><td>ddd</td> bddd 我怎么能在C#中做到这一点?我猜是regexp,但已经很久了,所以我需要一些帮助。var startTag=new Regex(@“\”; var startTag = new Regex(@"\<(?

我在表格上有一个相当讨厌的字符串:

<aa>b</aa><ccc>ddd</ccc>
bddd
我想把所有标签都换成
,我们将看到:

<td>b</td><td>ddd</td>
bddd
我怎么能在C#中做到这一点?我猜是regexp,但已经很久了,所以我需要一些帮助。

var startTag=new Regex(@“\”;
var startTag = new Regex(@"\<(?<tag>\w+)\s*\>");
var endTag = new Regex(@"\<\/\w+\>");
var result = startTag.Replace("<aa>b</aa><ccc>ddd</ccc>", "<td class=\"${tag}\">");
result = endTag.Replace(result,"</td>");
var endTag=new Regex(@“\”);
var result=startTag.Replace(“

很久以前,我的regex fu黑带被Kessel系统的某个有限自动机弄丢了

看起来您正在尝试处理一些类似XML的结构。元素值中是否可能包含CDATA记录?如果是这样,CDATA部分中不进行替换所需的正则表达式可能远高于我的薪资等级。否则,@Charlie似乎有一个很好的答案

如果可能存在包含内部标记的CDATA记录,则您可以将字符串作为XML使用,并以这种方式对其进行操作。根据您的示例,我将字符串片段包装在单个根元素中,以便将其解析为XElement,然后在重命名所有节点后将其展开。不像某些第7个dan regex那样聪明呃,我肯定,但可能会帮你

EDIT:基于希望输出字符串如下所示:
bddd
,那么XML处理无疑是一条必由之路,IMHO

var s = @"<aa>b</aa><ccc>ddd</ccc>";

var prefix = "<wrapper>";
var suffix = "</wrapper>";
var wrapped = prefix + s + suffix;

var wrapper = XElement.Parse(wrapped);
foreach (var e in wrapper.Descendants())
{
    e.Add(new XAttribute("class", e.Name));
    e.Name = "td";
}

wrapped = wrapper.ToString(SaveOptions.DisableFormatting);

// extract the resulting string from the root element
var result = wrapped.Substring(prefix.Length, wrapped.Length - (prefix.Length + suffix.Length));

Console.WriteLine(result);  // --> "<td class=\"aa\">b</td><td class=\"ccc\">ddd</td>"
var s=@“bddd”;
var前缀=”;
var后缀=”;
var wrapped=前缀+s+后缀;
var wrapper=XElement.Parse(包装);
foreach(wrapper.subjects()中的变量e)
{
e、 添加(新的XAttribute(“类”,即名称));
e、 Name=“td”;
}
wrapped=wrapper.ToString(SaveOptions.DisableFormatting);
//从根元素中提取结果字符串
var结果=wrapped.Substring(prefix.Length,wrapped.Length-(prefix.Length+后缀.Length));
Console.WriteLine(结果);//-->“bddd”
这将产生
bddd


不幸的是,我不知道如何让XElement为属性值生成单引号而不是双引号。但是,两者都是有效的XML,所以也许没关系。

如果我希望输出是这样的话?bddd?这有多难?@KonradViltersten我更改了答案以适应您的请求。XML比正则表达式更容易正如Charlie所建议的那样,我已经更改了代码,将标记名转换为类名。哦,这种方法的主要目的是刷新我的正则表达式技能,让同事目眩。但我同意XML比正则表达式更容易。事实上{放入几乎任何东西}可能比正则表达式更简单。我很欣赏能熟练使用它的人……没有CDATA。我只是在刷新我的正则表达式技能。一个程序员遇到了一个问题。他说:“我知道!我要用正则表达式!“.现在他有两个问题……:)