正则表达式,删除标签中的点号

5

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

例如:

test <12.34.56>test.test<12.34>

should be:

test <12346>test.test<1234>

所以基本上是在标签中删除点,有什么想法吗?

2
你有特别的原因需要使用正则表达式来“删除...”吗? - AakashM
2个回答

5
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

是的,那个很好用!虽然我不完全明白为什么,但只要它能用就行 :-) - NicolajB
@NicolajB:我已经添加了一份说明,希望这能帮到你。 - Tim Pietzcker
直到现在才看到这个解释。非常有用!非常感谢。 - NicolajB

2
我会使用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);

我有一个不好的怀疑,那就是问问题者所拥有的并不是真正的XML,而只是一个包含一些尖括号的字符串。当然,我可能是错的 :) - AakashM
这是一个很好的观点(只需遍历XML),但正如AakashM所说,它并不真正是XML......或者换句话说,把文档给我的人认为它是XML......但它不是格式良好的 :-) - NicolajB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接