2016-09-02 141 views
1

如果我有一个字符串,我该如何从字符串中提取第一个字母字符,以便最终得到起始字母字符或空字符串。例如:如何从字符串中获得第一组字母字符?

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

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

回答

2

您可以使用LINQ来构建结果:

new String(s.TakeWhile(p => Char.IsLetter(p)).ToArray()); 

基本上,只要采取从一开始的字符,直到第一个非字母字符。

如果存在领先的空白,Trim()字符串首先。

+0

参见[C#演示(HTTPS:/ /ideone.com/4M1I9Y)。顺便说一句,获得首字母的正则表达式是'@“^ \ p {L} *”',但在这里,您可以通过非正则表达式获得所需的内容 - 除非您只想限制某些特定的脚本。 –

+0

不错,有些“微观优化”:你可以使用'TrimStart'而不是'Trim',你可以使用's.TakeWhile(Char.IsLetter)' –

+0

是的,'TrimStart'看起来更合适。 –

0

可能是这样的:

^([A-Za-z])* 
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 => “AB”

PJ11 => “PJ”

123JO => “”

2

下面是一个例子( 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

另一个LINQ让我们来定义一个可接受的字符列表。这样创建HashSet<char>一次:

private HashSet<char> _alphas = new HashSet<char>("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); 

现在你可以使用这个简单而有效的LINQ查询:

string result = string.Concat(input.TakeWhile(_alphas.Contains)); 
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(); 
相关问题