根据Unicode代码点检索特定字符

时间:2012-12-16 17:49:13

标签: c# c#-4.0

我有一组40个字符,它们有自己的代码点。例如,U0678u0679等。如何根据代码点检索仅包含文本字符的单词,字符串和子字符串,忽略所有其他字符?我正在遭受旧代码的痛苦

private string token(string x)
{
    Regex exclude = new Regex(@"\d|\s+|/|-|[A-Za-z]", RegexOptions.Compiled);
    return string.Join(" ",
      (from s in Regex.Split(x, "([ \\t{}():;.,!ـ؛،؟ \"\n])")
       where !exclude.IsMatch(s)
       select s).ToArray());
}

编辑。假设我有字符串“aaa bbb ccc ddd”。然后我想只检索单词aaa和bbb。那我想做点什么

Regex regEx = new Regex(@"\u0041|\u0042");
Match match = regEx.Match(mystring);
if(match.Success)
 then do somthing

但我有40个字符。

1 个答案:

答案 0 :(得分:3)

  

好的,所以你有一组空格分隔的字符串和一组40个字符。您希望找到哪些字符串(以空格分隔)仅由这40个字符的组合构成?

     

@ Chris,是的,确实。

var charSet = new HashSet<char>("abcde\x015f" + Regex.Unescape("\u0066"));
//or var charSet = new HashSet<char>(new[] { 'a', 'b', 'c', 'd', 'e', 'ş', 'f'});
//or var charSet = new HashSet<char>(new[] { '\x0061', '\x0062', '\x0063', '\x0064', '\x0065', '\x015F', '\x0066'});
//or var charSet = new HashSet<char>(Regex.Unescape("\u0061\u0062\u0063\u0064\u0065\u015F\u0066"));
//or var charSet = new HashSet<char>("\x0061\x0062\x0063\x0064\x0065\x015F\x0066");

string input = "abc  defş aaa xyz";

var words =  input.Split()
                .Where(s => !String.IsNullOrWhiteSpace(s))
                .Where(s => s.All(c => charSet.Contains(c)))
                .ToList();