首先,我知道这是一个糟糕的解决方案,我不应该这样做.
背景:随意跳过
但是,我需要快速修复实时系统.我们目前有一个数据结构,通过一系列字符串构建器创建"xml"片段,将自身序列化为字符串.这是否是有效的XML我相当怀疑.在创建此xml之后,在通过消息队列发送之前,一些清理代码会在字符串中搜索xml声明的出现并将其删除.
这样做的方式(迭代每个执行indexOf的字符<?xml)是如此之慢,导致线程超时并杀死我们的系统.最终我会尝试正确地修复它(使用xml文档或类似的东西构建xml)但是今天我需要快速修复以替换那里的内容.
请记住,我知道这是一个远非理想的解决方案,但我需要快速修复以使我们恢复正常运行.
题
我想用正则表达式来查找声明.我正在计划:<\?xml.*?>然后使用Regex.Replace(input, string.empty)删除.
如果这个正则表达式有任何明显的问题,或者是否只是在代码中使用string.IndexOf("<?xml")和string.IndexOf("?>")(在更加理智的情况下)循环中编写它是更好的,你能告诉我吗?
编辑 我需要处理换行.
会:<\?xml[^>]*?>做的伎俩?
干杯!
EDIT2
谢谢您的帮助.正则表达式<\?xml.*?\?>很好.我最后编写了一些时序代码,并使用argex和IndexOf().我发现,对于我们最简单的用例,只需要声明剥离:
IndexOf()所以我去了,IndexOf()因为它很容易一个非常简单的循环.
干杯全都.
你可能想要这个:<\?xml.*\?>或者这个:<\?xml.*?\?>,因为你现在的方式,正则表达式不是寻找'?>'而只是'>'.我不认为你想要第一个选项,因为它是贪婪的,它将删除第一次出现''之间的所有内容.只要您没有嵌套的XML标记,第二个选项就会起作用.如果你这样做,它将删除第一个''之间的所有内容.如果你有另一个''标签.
另外,我不知道在.NET中如何实现正则表达式,但我很怀疑它们是否比使用indexOf更快.
| 归档时间: |
|
| 查看次数: |
9540 次 |
| 最近记录: |