我需要标记一个字符串,其中包含指示已通过测试的子字符串的开头和结尾的标识符.
假设我有一个字符串"快速的棕色狐狸跳过懒狗",我想用字符'b'和'o'开头的每个单词标记字符串.最后的字符串看起来像"快速<tag>brown</tag>狐狸跳<tag>over</tag>懒狗".
使用正则表达式和LINQ的组合我有正确的逻辑来完成我想要的但我的性能不是我想要的,因为我使用String.Insert插入标签.我们的字符串可以很长(> 200k),标记的子字符串数可以接近一百.下面是我用来插入标签的代码.鉴于我知道每个子字符串的开始和长度,如何更快地更新字符串'input'?
.ForEach<Match>(m => {
input = input.Insert(m.Index + m.Length, "</tag>");
input = input.Insert(m.Index, "<tag>");
});
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 10
你应该用一个StringBuilder.
为了获得最佳性能,请StringBuilder在执行任何操作之前设置容量,然后在标记之间附加原始字符串的块.
或者,将您的逻辑移动到MatchEvaluatorlambda表达式并调用RegeEx.Replace.
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |