我有一個格式爲MASTER CARD 01/01/2012
的字符串,我需要分別抓住日期部分。字符串操作來分離值
有時候可能是VISA 01/01/2012
,我嘗試了按空格拆分,但在有兩個空格的時候卡住了,如MASTER CARD 01/01/2012
。
任何幫助將不勝感激;
string date = e.Brick.Text;
string[] dates = date.Split(' ');
我有一個格式爲MASTER CARD 01/01/2012
的字符串,我需要分別抓住日期部分。字符串操作來分離值
有時候可能是VISA 01/01/2012
,我嘗試了按空格拆分,但在有兩個空格的時候卡住了,如MASTER CARD 01/01/2012
。
任何幫助將不勝感激;
string date = e.Brick.Text;
string[] dates = date.Split(' ');
你的字符串的樣子,你會得到你的最後一個元素在數組中的日期。
//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");
}
}
你可以使用你的代碼。
如果日期是總是在字符串的結尾,你可以用空格的月份和日期
斯普利特這樣做
year = dates[dates.Length-1]
等等,並使用DateTime.TryParse方法來解析日期。該方法對於VISA,MASTER和CARD應該失敗;但它會在字符串的日期部分成功。
這裏是另一種選擇:
string date = e.Brick.Text.Substring(e.Brick.Text.LastIndexOf(' ')+1);
注意這種方法,你根本不需要拆分或者有一個輔助數組。 – 2012-05-04 05:27:05
這應該做的伎倆。
public string ExtractDateTimeString(string s){
return s.Split(' ').Where(x =>
{
DateTime o;
return DateTime.TryParse(x, out o);
}).FirstOrDefault();
}
或者另一種方式:
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 + " ";
}
假設所有的各種卡的日期也有類似的格式,正則表達式可能是一個可行的選擇。
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));
}
你怎麼會被卡住時,有兩個空格?你確實在日期的最後一個元素中獲得了日期,對吧? –
對不起Mt Lister新手在這裏和學習..感謝您的耐心 – user710502
嘿,你不必爲成爲一個新手道歉。我們都是新手在某個領域或其他領域。 –