【问题标题】:How to get only letters from a string in C#?如何只从 C# 中的字符串中获取字母?
【发布时间】:2023-03-24 08:45:02
【问题描述】:

我有一个字符串,需要该字符串中的字母。

string s = "EMA123_33";    // I need "EMA"
string s = "EMADRR123_33"; // I need "EMADRR"

我在 Visual Studio 2008 中使用 C#。

【问题讨论】:

  • 如果我可以问,为什么会投反对票和投赞成票?好的,问题不是“好英语”,但我认为根据样本意思不是很清楚
  • 为什么要投反对票?是的,当他指的是“字母”时,他说的是“字母”,但这是一个完全合理的问题。
  • »alphabet« 表示»字母«是印度裔人常犯的错误。只要习惯 SO 被非美国人使用的事实......
  • 遗憾的是没有办法拒绝/惩罚 unjust 拒绝投票 ....
  • 我确实认为它过于本地化...但我懒得将其标记为关闭...我会给他+1,因为他没有要求使用正则表达式!

标签: c# string


【解决方案1】:

你可以试试这个:

var myString = "EMA123_33";
var onlyLetters = new String(myString.Where(Char.IsLetter).ToArray());

请注意:此版本会像“E”一样找到“e” - 如果您只需要大写字母,请执行以下操作:

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

【讨论】:

  • 你不需要使用Chars属性,字符串是可枚举的,但是你需要使用ToArray为字符串构造函数创建一个数组,你不能创建一个字符串来自IEnumerable<Char>
  • 啊-谢谢...(没有检查)-顺便说一句:我认为 .Chars 更具可读性-但这可能是口味问题
  • 我什至无法使用Chars 编译它。索引器名为Chars,因此您可以在VB 中使用s.Chars(0),但在C# 中它是s[0]
  • 无需添加“使用 System.Linq;”为了使用这个解决方案。
  • 这太美了!我喜欢看到 Linq 的实际应用,现在甚至可以做以前只有 Regex 才能做的事情!
【解决方案2】:

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

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

【讨论】:

  • Carten 的回答有利于使用非罗马字母。您应该考虑使用 UTF 字符类(我认为是\p{IsLetter}
  • @Richard Szalay:是的,这是另一种选择。这取决于 OP 想要什么行为。
  • *titches* Richard,这些是 Unicode 字符类。 UTF 仅标记 Unicode 的转换格式,实际上并不引用字符集。
  • 这为我返回了空字符串
【解决方案3】:

如果你只是在 initial 字母之后,即字符串开头的那些(你的例子有点不清楚,因为我不知道最后的字母会发生什么字符串),您可以使用不同的正则表达式:

string s2 = Regex.Replace(s, @"(\p{L}+).*", "$1");

【讨论】:

  • 即使这是一项附加要求,我认为将 Carten 的答案更改为使用 TakeWhile 会更有效且更易于理解/维护。
  • 可能,可能不会。在阅读处理字符串操作的代码时,我认为我宁愿使用正则表达式而不是 LINQ。
  • 公平,但我敢猜测大多数人对 LINQ 的熟悉程度要高于对 Unicode 字符类及其在正则表达式中的语法的熟悉程度。
  • @Richard:这正是 Joey 的回答有趣的原因:它教会了我们一些我们可能不知道的正则表达式;-)
  • 我认为:一个问题的答案越多(不同)越好 - 提出问题的人可以自己决定 - +1(顺便说一句:我必须搜索才能找到这个正则表达式在做什么 - 我只是不太喜欢他们)
【解决方案4】:
Regex MyRegex = new Regex("[^a-z]", RegexOptions.IgnoreCase);
string s = MyRegex.Replace(@"your 76% strings &*81 gose _ here and collect you want_{ (7 438 ?. !`", @"");
Console.WriteLine(s);

输出

yourstringsgosehereandcollecyouwant

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2021-09-12
    相关资源
    最近更新 更多