繁体   English   中英

正则表达式从字符串中删除xml声明

[英]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() 我发现,对于我们最简单的用例,只需要声明剥离:

  • 差不多一秒钟
  • 正则表达式的.01秒
  • 使用循环和IndexOf()无法估量

所以我去了IndexOf()因为它很容易就是一个非常简单的循环。

你可能想要这个: <\\?xml.*\\?>或者这个: <\\?xml.*?\\?> ,因为你现在的方式,正则表达式不是在寻找'?>'而只是为了'>'。 我不认为你想要第一个选项,因为它是贪婪的,它将删除第一次出现''之间的所有内容。 只要您没有嵌套的XML标记,第二个选项就会起作用。 如果你这样做,它将删除第一个''之间的所有内容。 如果你有另一个''标签。

另外,我不知道在.NET中如何实现正则表达式,但我很怀疑它们是否比使用indexOf更快。

strXML = strXML.Remove(0, sXMLContent.IndexOf(@"?>", 0) + 2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM