首先,我知道这是一个不好的解决方案,我不应该这样做。

背景:随时跳过

但是,我需要快速修复实时系统。当前,我们拥有一个数据结构,该数据结构可通过一系列字符串构建器创建“xml”片段,从而将自身序列化为字符串。我是否怀疑这是否是有效的XML。创建此xml之后,并在通过消息队列发送它之前,一些清理代码会在字符串中搜索xml声明的出现并将其删除。

完成此操作的方式(迭代每个字符对<?xml进行indexOf)非常慢,导致线程超时并杀死我们的系统。最终,我将尝试正确地解决此问题(使用xml文档或类似文件构建xml),但今天我需要快速修复以替换其中的内容。

请记住,我知道这不是理想的解决方案,但是我需要快速修复才能使我们恢复正常运行。

问题

我的想法是使用正则表达式来查找声明。我正在计划:<\?xml.*?>,然后使用Regex.Replace(input, string.empty)删除。

您能否让我知道此正则表达式是否存在任何明显问题,或者仅在(更为精巧的)循环中使用string.IndexOf("<?xml")string.IndexOf("?>")对将其编写为代码是否更好。

编辑
我需要照顾换行符。

会:<\?xml[^>]*?>可以解决问题吗?

EDIT2

谢谢您的帮助。正则表达式明智的<\?xml.*?\?>工作正常。我最终编写了一些计时代码,并使用ar egex和IndexOf()进行了测试。我发现,对于我们最简单的用例,仅声明剥离就花了:

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

  • 因此,我选择了IndexOf(),因为这很容易,它是一个非常简单的循环。

    最佳答案

    您可能想要的是<\?xml.*\?>或this:<\?xml.*?\?>,因为您现在拥有的方式是,正则表达式不是在寻找'?>'而是在寻找'>'。我认为您不需要第一个选项,因为它很贪心,并且会删除第一次出现''之间的所有内容。只要您没有嵌套的XML标签,第二个选项就可以使用。如果这样做,它将删除第一个''之间的所有内容。如果您还有另一个“”标签。

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

    10-02 05:23