提取仅包含 C# 中字母的字符串

本文关键字:字符串 包含 提取 | 更新日期: 2023-09-27 18:22:21

 string input = "5991 Duncan Road";
 var onlyLetters = new String(input.Where(Char.IsLetter).ToArray());

输出:邓肯路

但我预计输出是邓肯路。需要改变什么?

提取仅包含 C# 中字母的字符串

对于像您这样的输入,您不需要正则表达式,只需跳过开头的所有非字母符号SkipWhile()

只要指定的条件为 true,就会绕过序列中的元素,然后返回其余元素。

C# 代码:

var input = "5991 Duncan Road";
var onlyLetters = new String(input.SkipWhile(p => !Char.IsLetter(p)).ToArray());
Console.WriteLine(onlyLetters);

查看 IDEONE 演示

一个正则表达式解决方案,它将删除不属于单词的数字以及相邻的空格:

var res = Regex.Replace(str, @"'s+(?<!'p{L})'d+(?!'p{L})|(?<!'p{L})'d+(?!'p{L})'s+", string.Empty); 

您可以使用这个基于环顾四周的正则表达式:

repl = Regex.Replace(input, @"(?<![a-zA-Z])[^a-zA-Z]|[^a-zA-Z](?![a-zA-Z])", "");
//=> Duncan Road
  • (?<![a-zA-Z])[^a-zA-Z]匹配前面没有另一个字母的非字母。
  • |是正则表达式交替
  • [^a-zA-Z](?![a-zA-Z])匹配一个不后跟另一个字母的非字母。

正则表达式演示

您仍然可以将 LINQ 筛选与 Char.IsLetter || Char.IsWhiteSpace 一起使用。要删除所有前导和尾随空格字符,您可以调用String.Trim

string input = "5991 Duncan Road";
string res = String.Join("", input.Where(c => Char.IsLetter(c) || Char.IsWhiteSpace(c)))
                   .Trim();
Console.WriteLine(res); // Duncan Road