2016-01-22 54 views
1

删除的字符我使用正则表达式从字符串像下面删除不想要的字符:获得从字符串

str = System.Text.RegularExpressions.Regex.Replace(str, @"[^\u0020-\u007E]", ""); 

我如何可以检索将在有效的方式除去不同的角色?

编辑:

Sample input : str   = "This☺ contains Åüsome æspecialæ characters" 
Sample output : str   = "This contains some special characters" 
       removedchar = "☺,Å,ü,æ" 
+0

请发布样本输入与预期的输出。现在,你只能删除所有字符,但是从空间直到'z'。 –

+0

根据@WiktorStribiżew的要求添加样本输入和输出 –

回答

1

下面是一个例子,如何你可以用评估Regex.Replace超载内回调方法做到这一点:

评估者
                     类型:System.Text.RegularExpressions.MatchEvaluator
                       检查每个匹配并返回要么是原始匹配的字符串或替换字符串的定制方法。

C#演示:

using System; 
using System.Collections.Generic; 
using System.Text.RegularExpressions; 

public class Test 
{ 
    public static List<string> characters = new List<string>(); 
    public static void Main() 
    { 
     var str = Regex.Replace("§My string 123”˝", "[^\u0020-\u007E]", Repl);//"" 
     Console.WriteLine(str); // => My string 123 
     Console.WriteLine(string.Join(", ", characters)); // => §, ”, ˝ 
    } 

    public static string Repl(Match m) 
    { 
     characters.Add(m.Value); 
     return string.Empty; 
    } 
} 

IDEONE demo

总之,申报了 “全局” 变量(字符串列表,在这里,characters),对其进行初始化。添加Repl方法来处理替换,当Regex.Replace调用该方法时,将每个匹配值添加到characters列表中。

2
string pattern = @"[\u0020-\u007E]"; 
Regex rgx = new Regex(pattern); 
List<string> matches = new List<string>(); 

foreach (Match match in rgx.Matches(str)) 
{ 
    if (!matches.Contains (match.Value)) 
    { 
     matches.Add (match.Value); 
    } 
} 
+0

我是否也可以从上面的代码中同时删除字符而不是使用Regex.Replace? –