如何在C#中只获取字符串中的字母?

use*_*607 28 c# string

我有一个字符串,需要来自所述字符串的字母.

string s = "EMA123_33";    // I need "EMA"
string s = "EMADRR123_33"; // I need "EMADRR"
Run Code Online (Sandbox Code Playgroud)

我在Visual Studio 2008中使用C#.

Car*_*ten 59

你可以试试这个:

var myString = "EMA123_33";
var onlyLetters = new String(myString.Where(Char.IsLetter).ToArray());
Run Code Online (Sandbox Code Playgroud)

请注意:这个版本会发现"e"就像"E" - 如果你只需要大写字母,那么做这样的事情:

var myString = "EMA123_33";
var onlyLetters = new String(myString.Where(c => Char.IsLetter(c) && Char.IsUpper(c)).ToArray());
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是你需要添加"使用System.Linq;" 为了使用这个解决方案. (3认同)
  • 你不需要使用`Chars`属性,字符串是可枚举的,但是你需要使用`ToArray`为字符串构造函数创建一个数组,你不能用`IEnumerable <Char>创建一个字符串. . (2认同)

Guf*_*ffa 11

您可以使用正则表达式替换所有非字母:

string s2 = Regex.Replace(s, @"[^A-Z]+", String.Empty);
Run Code Online (Sandbox Code Playgroud)

  • Carten的答案有利于使用非罗马字母表.您应该考虑使用UTF字符类(`\ p {IsLetter}`我认为) (2认同)
  • \*twitches\*Richard,那些是Unicode字符类.UTF仅标记Unicode的转换格式,实际上并不引用字符集. (2认同)
  • 这为我返回了空字符串 (2认同)