2012-05-04 65 views
1

我有一個格式爲MASTER CARD 01/01/2012的字符串,我需要分別抓住日期部分。字符串操作來分離值

有時候可能是VISA 01/01/2012,我嘗試了按空格拆分,但在有兩個空格的時候卡住了,如MASTER CARD 01/01/2012

任何幫助將不勝感激;

string date = e.Brick.Text; 
string[] dates = date.Split(' '); 
+0

你怎麼會被卡住時,有兩個空格?你確實在日期的最後一個元素中獲得了日期,對吧? –

+0

對不起Mt Lister新手在這裏和學習..感謝您的耐心 – user710502

+0

嘿,你不必爲成爲一個新手道歉。我們都是新手在某個領域或其他領域。 –

回答

1

你的字符串的樣子,你會得到你的最後一個元素在數組中的日期。

//dates[dates.Length-1] should have date 

    string date = "MASTER CARD 01/01/2012"; 
    string[] dates = date.Split(' '); 
    Console.WriteLine(dates[dates.Length - 1]); 

一個適當的解決方案應該是檢查每個項目對日期時間,東西在下一行

DateTime tempDs = new DateTime(); 
      foreach (string str in dates) 
      { 

       if (DateTime.TryParse(str, out tempDs)) 
       { 
        Console.WriteLine("Found Date"); 
       } 
      } 
0

你可以使用你的代碼。

如果日期是總是在字符串的結尾,你可以用空格的月份和日期

0

斯普利特這樣做

year = dates[dates.Length-1] 

等等,並使用DateTime.TryParse方法來解析日期。該方法對於VISA,MASTER和CARD應該失敗;但它會在字符串的日期部分成功。

0

這裏是另一種選擇:

string date = e.Brick.Text.Substring(e.Brick.Text.LastIndexOf(' ')+1); 
+0

注意這種方法,你根本不需要拆分或者有一個輔助數組。 – 2012-05-04 05:27:05

0

這應該做的伎倆。

public string ExtractDateTimeString(string s){ 

    return s.Split(' ').Where(x => 
      { 
       DateTime o; 
       return DateTime.TryParse(x, out o); 
      }).FirstOrDefault(); 
} 
0

或者另一種方式:

 string text = "MASTER CARD 4.5.2012"; 
     string[] split = text.Split(' '); 

     string mc = ""; 
     string date = ""; //when you get this value, you can easily convert to date if you need it 

     foreach (string str in split) 
     { 
      if (char.IsNumber(str[0])) 
      { 
       date = str; 
       mc = mc.Remove(mc.Length - 1, 1); 
      } 
      else 
       mc += str + " "; 
     } 
1

假設所有的各種卡的日期也有類似的格式,正則表達式可能是一個可行的選擇。

using System.Text.RegularExpressions;

Match mDate = Regex.Match(e.Brick.Text, @"\b(?<date>(?:\d{1,2}[\\/-]){2}\d{4})\b", RegexOptions.Compiled); 
if (mDate.Success) 
{ 
    MessageBox.Show(string.Format("Date: {0}", mDate.Groups["date"].Value)); 
}