繁体   English   中英

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

[英]Extract string that contains only letters in C#

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

输出:DuncanRoad

但是我希望输出的是邓肯路 需要改变什么?

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

只要指定条件为真,就按顺序绕过元素,然后返回其余元素。

C#代码:

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

IDEONE演示

一个regx解决方案,将删除不属于单词并且与空格相邻的数字:

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 Char.IsLetter || Char.IsWhiteSpace 要删除所有String.Trim和结尾的空白字符,可以调用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM