如果我有一个字符串,我如何从字符串中提取第一个字母字符,以便最终得到起始字母字符或空字符串。 E.g:
AB12 9HG => "AB"
PJ11 => "PJ"
123JO => ""
这可能是正则表达式还是有更简单的方法?
答案 0 :(得分:3)
以下是一个示例(https://dotnetfiddle.net/CiIaqx):
var inputs = new [] { "ASD123", "PJ11", "123JO" };
foreach (var input in inputs)
{
var match = Regex.Match(input, "^([a-z]*)", RegexOptions.IgnoreCase);
if (match.Success)
{
Console.WriteLine("Checking: " + input + ", found: " + match.Groups[1].Value);
}
}
输出:
检查:ASD123,发现:ASD
检查:PJ11,发现:PJ
检查:123JO,发现:
答案 1 :(得分:2)
您可以使用LINQ构建结果:
new String(s.TakeWhile(p => Char.IsLetter(p)).ToArray());
基本上,只需从开头直到第一个非alpha字符。
如果有前导空格,则首先Trim()
字符串。
答案 2 :(得分:1)
让你定义一个接受字符列表的另一种LINQ方法如下。像这样创建HashSet<char>
:
private HashSet<char> _alphas = new HashSet<char>("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
现在您可以使用这个简单有效的LINQ查询:
string result = string.Concat(input.TakeWhile(_alphas.Contains));
答案 3 :(得分:0)
可能是这样的:
^([A-Za-z])*
答案 4 :(得分:0)
使用正则表达式非常简单。只需使用^
进行锚定,然后将零或更多与您想要的*
字符[A-Za-z]
匹配。
var inputs = new[] { "AB12 9HG", "PJ11", "123JO" };
Regex regex = new Regex(@"^[A-Za-z]*");
foreach (var x in inputs)
{
Console.WriteLine(x + " => \"" + regex.Match(x).Value + "\"");
}
输出
AB12 9HG =&gt; &#34; AB&#34;
PJ11 =&gt; &#34; PJ&#34;
123JO =&gt; &#34;&#34;
答案 5 :(得分:0)
我使用的是Portable Class Library
,因此无法访问字符串上的TakeWhile
方法,(或者我无法看到)。
因此我从Wiktors的答案中扩展了这个想法,并为我的字符串提出了一个扩展方法:
public static class StringExtensions
{
public static string GetStartChars(this string s)
{
var result = string.Empty;
if (!string.IsNullOrEmpty(s))
{
s = s.TrimStart();
foreach (var letter in s.ToCharArray())
{
if (char.IsLetter(letter))
{
result += letter;
}
else
{
break;
}
}
}
return result;
}
}
使用它像:
var startChars = "AB11".GetStartChars();