[英]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);
一个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.