RegExp,删除标签中的点

问题描述:

我一直在搜索和搜索,但找不到解决方案。
我需要删除在C#中使用正则表达式的XML文档的标记点....RegExp,删除标签中的点

因此,例如:

test <12.34.56>test.test<12.34> 

应该是:

test <12346>test.test<1234> 

所以基本上删除点,但只在标签....任何想法?

+2

是否有你 “需要删除... **与**正则表达式” 一个特别的原因? – AakashM 2012-02-15 11:13:24

resultString = Regex.Replace(subjectString, @"\.(?=[^<>]*>)", ""); 

只有当下一个后括号是闭角尖括号时,才会用空字符串替换点。

这当然很脆弱,因为关闭角括号可能出现在标签之间的文本内部,但如果您确定不会出现这种情况,则应该可以。

说明:

\.  # Match a dot 
(?=  # only if the following regex can be matched at the current position: 
[^<>]* # - zero or more characters except <or> 
>  # - followed by a > 
)  # End of lookahead assertion 
+0

是的,这工作得很好!我不确定我完全理解为什么,但只要它能正常工作就没有关系:-) – NicolajB 2012-02-15 12:01:27

+0

@NicolajB:我已经添加了一个解释,希望这有助于解决问题。 – 2012-02-15 12:26:02

+0

直到现在才看到解释。很有用! thx很多 – NicolajB 2012-03-20 12:53:13

我会使用XML解析器它

XDocument xdoc = XDocument.Load(new StringReader("<root><s123.45><s678.9>aaaa</s678.9></s123.45></root>")); 
foreach (var elem in xdoc.Descendants()) 
    elem.Name = elem.Name.LocalName.Replace(".", ""); 
Console.WriteLine(xdoc); 
+0

我有一个令人讨厌的怀疑,即将发现提交者所拥有的实际上并不是xml,而是恰好包含一些尖括号的字符串。我当然可能错了:) – AakashM 2012-02-15 11:36:52

+0

嗯,这是一个很好的观点(只是遍历XML),但正如AakashM所说的那样,它不是真正的XML ......或者以另一种方式说;那些向我提供文档的人认为它是XML ......但它不是格式良好的:-) – NicolajB 2012-02-15 12:00:20