【发布时间】:2011-07-23 00:02:57
【问题描述】:
在 StringBuilder 上多次进行正则表达式替换的最佳方法是什么?
如果您不介意成为tl;dr 的人,请进一步阅读以了解详细信息:
嗨,我有一个函数可以对字符串进行大量字符串操作。所以很自然,我使用 StringBuilder 类。现在我进退两难了。
我的功能是这样的:
ParsedText.Append("some footers here");
ParsedText.Replace("[b]","<b>"); //format all bold opens
ParsedText.Replace("[/b]","</b>"); //format all bold closes
ParsedText.Replace("\n","<br />"); //format newlines
.... sh!* load of other replaces and manipulations ...
//Add <a href> to all links
ParsedText = new StringBuilder(Regex.Replace(ParsedText, "pattern", "replacement"))
现在,我有一个.. 我想要替换的自定义单词(模式)列表 - 大约 20 个模式..
我正在尝试用它们各自的图像替换所有笑脸符号;像这样:
:) becomes <img src="smile.png" />
;) becomes <img src="wink.png" />
等等...我有大约 20 个图像/符号要替换,我正在使用这个正则表达式
(?<=^|\s):d(?=$|\s) //positive lookahead and lookback at :d
Bob Vale 友情提供。
这一切都很好,除了,我不知道如何用 StringBuilder 进行正则表达式替换,我不想像这样创建一个新的 StringBuilder:
ParsedText = new StringBuilder(Regex.Replace(...));
20 次,因为我认为它违背了整个内存保护的目的。
那么,在 StringBuilder 上进行正则表达式替换的最佳方法是什么?
谢谢!
【问题讨论】:
-
我认为你错过了
StringBuilder的重点。在连接多个字符串时,它提供O(n)字符串连接而不是O(n^2)。仅此而已。 -
@Matt Ball,抱歉听起来很愚蠢,O(n) 和 O(n^2) 是什么意思?
-
它被称为大 O 表示法。在这种情况下,这意味着随着项目的数量(或字符串的长度)变大,附加它们的时间或内存将线性增加而不是指数增加。
-
“如果您不介意成为 tl;dr 的人,请进一步阅读以了解详细信息:”我认为您不明白 tl;dr 的意思。 ಠ_ಠ
-
@Joel,感谢您的解释。
标签: c# regex stringbuilder