2

我有一串用 . 分隔的单词([ \\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();
4

2 回答 2

0

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

于 2012-05-06T15:09:59.560 回答
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();
    }
}
于 2012-05-06T17:23:00.307 回答