在取出两个标记之间的所有换行符、制表符和回车符时遇到问题
本文关键字:制表符 换行符 回车 问题 遇到 之间 两个 | 更新日期: 2023-09-27 18:25:42
我已经为此工作了将近一天。但我无法从">"answers"<"中取出所有换行符、制表符和回车符
这是我正在阅读的一个示例XML文件:
<Consequence_Note>
<Text>In some cases, integer coercion errors can lead to exploitable buffer
overflow conditions, resulting in the execution of arbitrary
code.</Text>
</Consequence_Note>
和这个
<Consequence_Scope>Availability</Consequence_Scope>
<Consequence_Technical_Impact>DoS: resource consumption
(CPU)</Consequence_Technical_Impact>
我的目标是从这两个标记(>和<)中去掉所有换行符、制表符和回车符。我唯一能做到的就是当">"answers"<"之间没有任何内容时,从这两个标签中取出所有/n/t/r。但当两个标签之间有其他字符时,我无法删除所有字符。
我需要帮助如何获得一个正则表达式,该表达式将去掉">"answers"<"中的所有换行符、标记和回车
例如:
<Consequence_Technical_Impact>DoS: resource consumption
(CPU)</Consequence_Technical_Impact>
我想要的是:
<Consequence_Technical_Impact>DoS: resource consumption (CPU)</Consequence_Technical_Impact>
这是我的代码(我正在从一个xml文件中读取):
String file = @"C:'Documents and Settings'YYC'Desktop'cwec_v2.1'cwec_v2.1.xml";
var lines = File.ReadAllText(file);
var replace = Regex.Replace(lines, @">(['r'n't])*?<", "><");
File.WriteAllText(file, replace);
不要用regexp解析html/xml(RegEx匹配除XHTML自包含标记之外的开放标记)!
对XML使用XML阅读器,对html使用HtmlAgilityPack(或其他一些html工具)。
xml/html文档非常复杂,regexp并不总是(在某些情况下是的,但不是一般的)完全正确地完成工作。
如果您第一次使用XmlReader读取文档,默认情况下它会从输入中删除换行符。然后你可以简单地用正确的设置把它写出来。
请参阅:http://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.ignorewhitespace.aspx请参阅:http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx
可能可以构建regex替代方案,但对于包含CData、注释和其他构造的XML,它仍然会有很多问题,这些构造使得XML一开始就很难解析。如果您的XML是结构化的、机器生成的并且不变的,那么您可以创建一个regex来修复它,但另一方面,您也可以修复生成器。可能工作的最简单正则表达式:
's{2,}
替换为
[ ]
这会去掉任何超过一个字符的空白,并用一个空格替换。不需要以不同的方式处理标记中的任何其他空白,无论如何,XMLReader默认都应该这样做。