use*_*966 0 c# string pattern-matching
我有一个包含字母和数字的字符串.此字符串还包含我要提取的日期.
例如: anv749dld95hd01/01/2012ncjf739dkcju
我想获得包含以下内容的新字符串: 01/01/2012
我唯一想到的就是使用它来分割它:str.Split('/')
这样我将获得一个数组并处理每个单元格 - 获取第一个单元格的两个最后一个字符,获取第二个单元格的值,然后从中获取前4个字符第三个细胞.
有没有更好的方法呢?
那你可以使用正则表达式:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
(你可以打电话Match.NextMatch来检查只有一场比赛.)
要将其解析为a 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
}
Run Code Online (Sandbox Code Playgroud)
(我们无法判断它是否意味着; dd/MM/yyyy或MM/dd/yyyy根据需要进行调整.)
如果你愿意,你还可以另外收紧正则表达式,这样月份的第一个数字必须是0或1,而当天的第一个数字必须是0,1或2.这取决于你的数据是什么就像,真的.