首先,我知道这是一个糟糕的解决方案,我不应该这样做。
背景:随意跳过
但是,我需要快速修复实时系统。我们目前有一个数据结构,它通过一系列字符串构建器创建“xml”片段,将自身序列化为字符串。这是否是有效的 XML 我相当怀疑。创建此 xml 之后,在通过消息队列发送它之前,一些清理代码会搜索字符串以查找 xml 声明的出现并删除它们。
这样做的方式(迭代每个执行 indexOf 的字符<?xml
)非常慢,导致线程超时并杀死我们的系统。最终,我将尝试正确解决此问题(使用 xml 文档或类似的东西构建 xml),但今天我需要一个快速修复来替换那里的内容。
请记住,我知道这远非理想的解决方案,但我需要快速修复以使我们恢复正常运行。
问题
我想使用正则表达式来查找声明。我打算:<\?xml.*?>
,然后使用Regex.Replace(input, string.empty)
删除。
您能否让我知道这个正则表达式是否有任何明显的问题,或者只是在代码中使用string.IndexOf("<?xml")
和string.IndexOf("?>")
在(更明智的)循环中配对会更好。
编辑 我需要照顾换行符。
会:<\?xml[^>]*?>
做这个把戏?
编辑2
谢谢您的帮助。正则表达式明智地<\?xml.*?\?>
工作得很好。我最终编写了一些计时代码并使用 ar egex 和IndexOf()
. 我发现,对于我们最简单的用例,只需要声明剥离:
- 几乎一秒钟
- 0.01 秒的正则表达式
- 不合时宜的使用循环和
IndexOf()
所以我选择了IndexOf()
一个非常简单的循环,因为它很容易。