我有一个包含字母和数字的字符串。该字符串还包含我要提取的日期。
示例:anv749dld95hd01/01/2012ncjf739dkcju
我想获得包含以下内容的新字符串:01/01/2012
我唯一想到的就是使用它来分割它:str.Split('/')
通过这种方式,我将获得一个数组并处理每个单元格 - 获取第一个单元格的最后两个字符,获取第二个单元格的值,然后从第三个单元格中获取前4个字符。
有更好的方法吗?
答案 0 :(得分:5)
你可以使用正则表达式:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main()
{
var input = "anv749dld95hd01/01/2012ncjf739dkcju";
var regex = new Regex(@"\d{2}/\d{2}/\d{4}");
var match = regex.Match(input);
if (match.Success)
{
Console.WriteLine("Got match: {0}", match.Value);
}
else
{
Console.WriteLine("No match found");
}
}
}
(您可以致电Match.NextMatch
查看是否只有一个匹配。)
要将其解析为DateTime
,您就可以使用以下内容:
string dateText = match.Value;
DateTime date;
if (DateTime.TryParseExact(dateText, "dd/MM/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out date))
{
// Use date
}
else
{
// Couldn't parse the value
}
(我们无法判断它是dd/MM/yyyy
还是MM/dd/yyyy
;根据需要进行调整。)
如果你愿意,你还可以额外收紧正则表达式,这样月份的第一个数字必须是0或1,而当天的第一个数字必须是0,1或2.这取决于什么你的数据真的很像。
答案 1 :(得分:2)
你可以使用Substring,你可以找到第一个正斜杠,然后在两个字符前面开始子字符串,然后取10个字符。
string date = str.Substring(s.IndexOf('/')-2, 10);
您可以使用DateTime.TryParseExact解析子字符串,以确保您获得正确的子字符串。
bool isParsed = DateTime.TryParseExact(date, "dd/MM/YYYY", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out x1);
答案 2 :(得分:0)
使用RegEx查找模式并返回所需的字符串。