我有一串由([ \\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();
答案 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();
}
}