2015-04-27 71 views
0

我想为以下XML中的每个标记添加<span></span>。 我想使用这样的C#正则表达式。使用正则表达式替换具有匹配模式的字符串

Regex.Replace(xml, @"<*>", @"<span>" + @"<*>" + "</span>") 

原始XML:

<div id="Content"> 
    <p>1</p> 
    <h2>1</h2> 
    <h2>2</h2> 
</div> 

修改XML

<span><div id="Content"></span> 
    <span><p></span>1<span></p></span> 
    <span><h2></span>1<span></h2></span> 
    <span><h2></span>2<span></h2></span> 
<span></div></span> 
+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-除-xhtml-self-contained-tags/1732454#1732454 –

+0

生成的文件不是有效的XML或HTML。 –

+0

请仅为使用JavaScript,HTML和/或CSS编写的可执行示例使用片段。如果您只想显示其他语言的代码片段或仅显示文件的语法(没有完整的示例),请使用代码块。 –

回答

0

下面是如何实现这一或多或少安全工作的例子:

var xml = "<div id=\"Content\">\r\n <p>1</p>\r\n <h2>1</h2>\r\n <h2>2</h2>\r\n</div>"; 
var result = Regex.Replace(xml, @"<[^>]+?>", @"<span>$&</span>"); 

使用的正则表达式是<[^>]+?>,只是匹配< ,那么任何不是>>

输出:

enter image description here

+0

WOW。正是我在找什么。工作完美!感谢您的快速响应 –

+0

我刚刚检查,并删除了不必要的(在本例中)'Singleline'选项。我没有使用'.'正则表达式类似于Fede,所以我不需要它,因为'[^>] +'已经匹配换行符号。 –

1

我建议避免使用正则表达式的XHTML,因为它是众所周知的,有更好的工具。您可以使用xml解析器,xquery,xpath等。

但是,如果您仍然需要使用或想要使用正则表达式,那么您必须使用捕获组并使用非贪婪正则表达式。您可以使用此:

(<.*?>) 

working demo

+0

创建额外的捕获组没有意义,这是不必要的开销。您可以使用'$&'替换完整匹配。此外,当标签属性跨越多行时,您的正则表达式不会匹配案例:https://regex101.com/r/dB1wQ7/2。 –

+0

@stribizhev感谢您的有用评论,我对c#不太好。看到你的答案,选择,非常好。 –

+0

看起来像一个正则表达式已经在这里:(每个答案得到-1。 –

-1

这个怎么样

  string input = "<div id=\"Content\">" + 
 
          "<p>1</p>" + 
 
          "<h2>1</h2>" + 
 
          "<h2>2</h2>" + 
 
          "</div>"; 
 
      string pattern = @"(</?\w+>)"; 
 

 
      string output = Regex.Replace(input, pattern, "<span>$1</span>"); 
 
      output = "<span>" + output + "</span>";​

相关问题