将字符串拆分为字符串构建器,删除与模式匹配的所有单词

时间:2012-05-06 14:47:41

标签: c# regex string

我有一串由([ \\t{}():;.,،\"\n])分隔的单词。如何在删除与模式StringBuilder匹配的任何单词时将该字符串拆分为@"\d|\s|/|-",并删除长度小于2个字符的所有单词。最后,我想将它存储回字符串。

Regex r = new Regex("([ \\t{}():;.,،\"\n])");

    String[] tokens = r.Split(sb.ToString());
    List<string> filter = new List<string>();
    for (int i = 0; i < tokens.Length; i++)
    {
        ........................
        {
            .....................
        }


    }

    ................

    return builder.ToString();

2 个答案:

答案 0 :(得分:0)

代码对我来说非常好。正则表达式处理确实需要很长时间。也许尝试创建@"\d\s|/|-"作为Regex m = new Regex( @“\ d \ s | / | - ”);`在顶部以避免在每一圈重新分析它。

答案 1 :(得分:0)

我想出了这个。它与您的解决方案没什么不同,除了我使用LINQ并完全避免使用StringBuidler。你能接受吗?

using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

class Program {
    static void Main(string[] args) {
        string value = "one or:another{3}";
        Regex exclude = new Regex(@"\d|\s|/|-", RegexOptions.Compiled);
        string final = string.Join(" ",
            (from s in Regex.Split(value, "([ \\t{}():;.,،\"\n])")
                where s.Length > 2 && !exclude.IsMatch(s)
                select s.Replace("ه‌","ه")).ToArray());

        // to get the List<string> instead:
        List<string> l = (from s in Regex.Split(value, "([ \\t{}():;.,،\"\n])")
            where s.Length > 2 && !exclude.IsMatch(s)
            select s.Replace("ه‌","ه")).ToList();
    }
}