2012-08-03 43 views
0

我需要查找包含在字符串中的字符。 除A-Z(lower and upper) or numbers or() or /, 之外的任何值都是允许的唯一字符。我需要在字符串中找到特殊字符并将它们显示在C#中的标签中

其他任何东西(特别是à,è,ë,Ç,ç,ï and so forth)对于在标签中查找和显示至关重要。

基本上我使用streamreader存储了从文本文件到字符串的所有内容。 现在除[a-zA-z0-9]()/之外的每个字符都需要显示在标签中。

文本文件看起来像这样:

0145 Joane 5521复方麻辛
0211 CHANE 2145马刺
0124马顿4512 btgames,

private void button1_Click(object sender, EventArgs e) 
    { 

     string BodyToCheck = richTextBox1.Text; 

     //This is where I need coding.... 
    } 




    private void Form1_Load(object sender, EventArgs e) 
    { 

     StreamReader reader = new StreamReader("C:/Users/Quinell.Struthers/Test.txt"); 

     string body = reader.ReadToEnd(); 
     reader.Close(); 
     reader.Dispose(); 

     richTextBox1.Text = body; 
    } 
+2

男士'n'女孩 - 我们可以停止投票结束和downvoting而不打扰向用户解释***为什么***。社区将会死亡。 http://blog.stackoverflow.com/2012/07/the-hunting-of-the-snark/?cb=1 – 2012-08-03 10:27:21

+0

@QllllStruthers - 第一:欢迎来到SO':D' - 我会试着解释其他人在哪里没有。提出SO问题的最佳方式 - 尤其是这样的问题 - 是告诉我们您目前在尝试什么,以及您遇到了哪些问题(特别有用的是简短的代码片段)。如果你还没有尝试过什么,因为你真的不知道如何解决问题;那么你可以这么说 - 但是除非你找到了一个潜在的解决方案,并且无法理解如何使用它,否则你很可能会得到'去学习'的答案(可能是关闭的)。 – 2012-08-03 10:31:54

+0

安德拉斯,我不会说这么激烈。但imho这不是一个真正的社区要么;-) – Joey 2012-08-03 10:32:44

回答

0

那么,你可以使用正则表达式替换为删除允许的字符,然后显示标签中不允许的所有字符:

label1.Text = Regex.Replace(textBox1.Text, "(?i)[a-z0-9()/]", ""); 
+0

其他方式不是吗? OP是否需要非法字符? – 2012-08-03 10:31:19

+0

是的,他们这样做,对不起。 – Joey 2012-08-03 10:31:59

+0

嗯,我试过这个,但标签返回空。我只需要显示除我提到的第一组以外的所有字符。 – 2012-08-03 10:43:28

0
public static string GetSpecialCharacters(string str) { 
    StringBuilder sb = new StringBuilder(); 
    foreach (char c in str) { 
     if (!((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') | || (c >= 'a' && c <= 'z') | c == '.' || c == '_')) { 
     sb.Append(c); 
     } 
    } 
    return sb.ToString(); 
} 
+0

如果它是一个扩展方法,你需要'string str'前面的关键字'this'。 – 2012-08-03 10:37:25

+0

是的,谢谢你提到Bob!我已更新它..不必是扩展方法! – Vinoth 2012-08-03 10:40:01

+0

也行不通 – 2012-08-03 10:48:36

0
using System.Text.RegularExpressions; 
using System.Linq; 
var regex=new Regex("[^A-Za-z0-9()/]"); 
var toDisplay=string.Join("",regex.Matches(testString).OfType<Match>().Select(x=>x.Value).ToArray()); 

编辑其实乔伊的回答使得它更简单,使用替代,而不是抓住所有的值

using System.Text.RegularExpressions; 

var regex=new Regex("[A-Za-z0-9()/]"); 
var toDisplay=regex.Replace(testString,string.Empty); 

编辑:方法说明2

的使用需要先与其他用户一样,位于文件的顶部。

下一行创建一个正则表达式对象Regex on MSDN

这个正则表达式将匹配的范围是从A-Z,任何字符a-z0-9和附加将匹配()/

最后,将变量toDisplay设置为用空字符串替换所有这些匹配的结果(从结果中有效地删除它们)。 testString是您希望过滤的源字符串。该代码不会更改源字符串仅设置为显示为过滤器的结果。

+0

我真的不明白。请你再解释一下你在这里使用的方法,请 – 2012-08-03 10:47:58

+0

@QuinellStruthers我已经更新了答案,这是否解释得更好? – 2012-08-03 11:00:07

+0

是的,我更了解它,但标签仍为空 – 2012-08-03 11:07:25