如何从字符串中获取第一组字母字符?

时间:2016-09-02 12:04:56

标签: c# regex split

如果我有一个字符串,我如何从字符串中提取第一个字母字符,以便最终得到起始字母字符或空字符串。 E.g:

AB12 9HG => "AB"
PJ11 => "PJ"
123JO => ""

这可能是正则表达式还是有更简单的方法?

6 个答案:

答案 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();