gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:45 31 4
gpt4 key购买 nike

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

背景:随意跳过


但是,我需要快速修复实时系统。我们目前有一个数据结构,它通过一系列字符串构建器创建“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.*\?>或者这个:<\?xml.*?\?> ,因为你现在的方式,正则表达式不是在寻找“?>”,而是在寻找“>”。我不认为你想要第一个选项,因为它很贪心,它会删除第一次出现的 '' 之间的所有内容。只要您没有嵌套的 XML 标签,第二个选项就可以使用。如果这样做,它将删除第一个 '' 之间的所有内容。如果您有另一个 '' 标签。

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

关于c# - 正则表达式从字符串中删除 xml 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125212/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com