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|/|-");`@"\d\s|/|-"として作成してみてください。Regex m = new Regex(

于 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 に答える