使用正则表达式替换而不是字符串替换

时间:2013-03-05 09:16:47

标签: c# asp.net regex

我没有像我应该的那样对正则表达式嗤之以鼻,所以这看起来像是一个愚蠢的问题。

我正在stringstring[]分成.Split(' ')。{ 目的是检查单词,或替换任何单词。

我现在遇到的问题是,对于要替换的单词,它必须是完全匹配,但是按照我分割它的方式,可能会有{ {1}}或(包含拆分字。

到目前为止,为了解决这个问题,我正在使用这样的东西:
[

现在这种方法很好用,但我想加入更多特殊字符,例如formattedText.Replace(">", "> ").Replace("<", " <").Split(' ')

有没有比我更换方法更快的方法,比如Regex?我有一种感觉,我的路线远非最佳答案。

修改
[;\\/:*?\"<>|&']
将被替换为
This is an (example) string

2 个答案:

答案 0 :(得分:4)

如果要替换整个单词,可以使用这样的正则表达式来完成。

string text = "This is an example (example) noexample";
string newText = Regex.Replace(text, @"\bexample\b", "!foo!");

newText将包含"This an !foo! (!foo!) noexample"

这里的关键是\b是单词break字符。因此它将匹配行的开头或结尾,以及单词字符(\ w)和非单词字符(\ W)之间的转换。它与使用\ w或\ W之间的最大区别在于它们在行的开头或结尾处不匹配。

答案 1 :(得分:0)

我认为这是你想要的正确的事情

如果你想要这些 - &gt; ?; \ /:*“&LT;&GT; |&安培;”要替换的符号

string input = "(exam;\\/:*?\"<>|&'ple)";
        Regex reg = new Regex("[;\\/:*?\"<>|&']");
        string result = reg.Replace(input, delegate(Match m)
        {
            return " " + m.Value + " ";
        });

如果要替换除a-zA-Z0-9 _

之外的所有字符
 string input = "(example)";
        Regex reg = new Regex(@"\W");
        string result = reg.Replace(input, delegate(Match m)
        {
            return " " + m.Value + " ";
        });