代码之家  ›  专栏  ›  技术社区  ›  xan

从字符串中删除XML声明的regex

  •  4
  • xan  · 技术社区  · 14 年前

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

    背景:随意跳过


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

    这样做的方式(迭代为 <?xml )它的速度太慢,导致线程超时和系统崩溃。最终,我将尝试正确地修复这个问题(使用XML文档或类似的东西构建XML),但今天我需要一个快速的修复来替换现有的问题。

    请记住,我知道这远远不是一个理想的解决方案,但我需要一个快速的解决方案来让我们重新启动和运行。


    问题

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

    你能告诉我这个regex是否有任何明显的问题,或者是否只是用代码编写它 string.IndexOf("<?xml") string.IndexOf("?>") 在一个(更理智的)循环中配对更好。

    编辑 我需要处理新品。

    威尔: <\?xml[^>]*?> 耍把戏吗?

    干杯!

    编辑2

    谢谢你的帮助。正则表达式 <\?xml.*?\?> 工作很好。最后我编写了一些计时代码,并使用ar egex测试了这两种方法,以及 IndexOf() . 我发现,对于我们最简单的用例,声明剥离只需要:

    • 差不多一秒钟
    • 0.01秒
    • 无法通过循环和 索引()

    所以我去了 索引() 因为很简单,一个非常简单的循环。

    干杯。

    2 回复  |  直到 9 年前
        1
  •  6
  •   Jordi    14 年前

    <\?xml.*\?> <\?xml.*?\?>

        2
  •  -1
  •   Jonnus    9 年前
    strXML = strXML.Remove(0, sXMLContent.IndexOf(@"?>", 0) + 2);