我有一个格式为MASTER CARD 01/01/2012
的字符串,我需要单独获取日期部分。
有时它可能是VISA 01/01/2012
,我尝试按空格分割但是在有MASTER CARD 01/01/2012
的情况下有两个空格时卡住了。
非常感谢任何帮助;
string date = e.Brick.Text;
string[] dates = date.Split(' ');
答案 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检查每个项目,在下一行
DateTime tempDs = new DateTime();
foreach (string str in dates)
{
if (DateTime.TryParse(str, out tempDs))
{
Console.WriteLine("Found Date");
}
}
答案 1 :(得分: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));
}
答案 2 :(得分:0)
您可以使用您的代码。
如果日期总是在字符串的末尾,您可以执行类似
的操作year = dates[dates.Length-1]
等等月和日
答案 3 :(得分:0)
按空格拆分并使用DateTime.TryParse方法解析日期。对于VISA,MASTER和CARD,该方法应该失败;但它会成功地为字符串的日期部分。
答案 4 :(得分:0)
这是另一种选择:
string date = e.Brick.Text.Substring(e.Brick.Text.LastIndexOf(' ')+1);
答案 5 :(得分:0)
这应该可以解决问题。
public string ExtractDateTimeString(string s){
return s.Split(' ').Where(x =>
{
DateTime o;
return DateTime.TryParse(x, out o);
}).FirstOrDefault();
}
答案 6 :(得分: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 + " ";
}