[英]Regex to remove xml declaration from a string
首先,我知道这是一个糟糕的解决方案,我不应该这样做。
背景:随意跳过
但是,我需要快速修复实时系统。 我们目前有一个数据结构,通过一系列字符串构建器创建“xml”片段,将自身序列化为字符串。 这是否是有效的XML我相当怀疑。 在创建此xml之后,在通过消息队列发送之前,一些清理代码会在字符串中搜索xml声明的出现并将其删除。
这样做的方法(迭代每个为<?xml
做indexOf的字符)是如此之慢,导致线程超时并杀死我们的系统。 最终我会尝试正确地修复它(使用xml文档或类似的东西构建xml)但是今天我需要快速修复以替换那里的内容。
请记住,我知道这是一个远非理想的解决方案,但我需要快速解决方案让我们恢复正常运行。
题
我想用正则表达式来查找声明。 我计划: <\\?xml.*?>
,然后使用Regex.Replace(input, string.empty)
删除。
如果这个正则表达式有任何明显的问题,或者是否只是使用string.IndexOf("<?xml")
和string.IndexOf("?>")
对在一个(更加理智)中编写它,你能告诉我string.IndexOf("?>")
循环更好。
编辑我需要处理换行。
会: <\\?xml[^>]*?>
做的伎俩?
EDIT2
谢谢您的帮助。 正则表达式<\\?xml.*?\\?>
工作正常。 我最后编写了一些时序代码并使用ar egex和IndexOf()
。 我发现,对于我们最简单的用例,只需要声明剥离:
IndexOf()
无法估量 所以我去了IndexOf()
因为它很容易就是一个非常简单的循环。
你可能想要这个: <\\?xml.*\\?>
或者这个: <\\?xml.*?\\?>
,因为你现在的方式,正则表达式不是在寻找'?>'而只是为了'>'。 我不认为你想要第一个选项,因为它是贪婪的,它将删除第一次出现''之间的所有内容。 只要您没有嵌套的XML标记,第二个选项就会起作用。 如果你这样做,它将删除第一个''之间的所有内容。 如果你有另一个''标签。
另外,我不知道在.NET中如何实现正则表达式,但我很怀疑它们是否比使用indexOf更快。
strXML = strXML.Remove(0, sXMLContent.IndexOf(@"?>", 0) + 2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.