c#如何在字符串中查找特定模式?

use*_*966 0 c# string pattern-matching

我有一个包含字母和数字的字符串.此字符串还包含我要提取的日期.

例如: anv749dld95hd01/01/2012ncjf739dkcju

我想获得包含以下内容的新字符串: 01/01/2012

我唯一想到的就是使用它来分割它:str.Split('/') 这样我将获得一个数组并处理每个单元格 - 获取第一个单元格的两个最后一个字符,获取第二个单元格的值,然后从中获取前4个字符第三个细胞.

有没有更好的方法呢?

Jon*_*eet 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");
        }
    }
}
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/yyyyMM/dd/yyyy根据需要进行调整.)

如果你愿意,你还可以另外收紧正则表达式,这样月份的第一个数字必须是0或1,而当天的第一个数字必须是0,1或2.这取决于你的数据是什么就像,真的.