string input = "5991 Duncan Road";
var onlyLetters = new String(input.Where(Char.IsLetter).ToArray());
输出:DuncanRoad
但我期待输出 Duncan Road 。需要改变什么?
答案 0 :(得分:3)
对于像你这样的输入,你不需要正则表达式,只需在SkipWhile()
开头跳过所有非字母符号:
只要指定的条件为真,就会跳过序列中的元素,然后返回剩余的元素。
C#代码:
var input = "5991 Duncan Road";
var onlyLetters = new String(input.SkipWhile(p => !Char.IsLetter(p)).ToArray());
Console.WriteLine(onlyLetters);
请参阅IDEONE demo
一个regx解决方案,它将删除不属于单词的数字以及相邻的空格:
var res = Regex.Replace(str, @"\s+(?<!\p{L})\d+(?!\p{L})|(?<!\p{L})\d+(?!\p{L})\s+", string.Empty);
答案 1 :(得分:2)
您可以使用此基于外观的正则表达式:
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])
匹配后面没有其他字母的非字母。答案 2 :(得分:1)
您仍然可以使用Char.IsLetter || Char.IsWhiteSpace
进行LINQ过滤。要删除所有前导和尾随空格字符,可以调用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