2016-09-02 137 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(); 
相關問題