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

c#如何在字符串中查找特定模式?,c#,string,pattern-matching,C#,String,Pattern Matching,我有一个包含字母和数字的字符串。此字符串还包含我要提取的日期 示例:anv749dld95hd01/01/2012ncjf739dkcju 我想获取包含以下内容的新字符串:01/01/2012 我唯一想到的是使用:str.split('/') 这样我将得到一个数组并处理每个单元格-取第一个单元格的最后两个字符,获取第二个单元格的值,然后从第三个单元格中获取前4个字符 有更好的方法吗?使用正则表达式查找模式并返回所需字符串。您可以使用正则表达式: using System; using Syste

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

示例:
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");
        }
    }
}
(您可以调用
Match.NextMatch
检查是否只有一个匹配项。)

要将其解析为
日期时间
,您可以使用如下内容:

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/yyyyy
还是
MM/dd/yyyy
;根据需要进行调整。)

如果需要,您还可以进一步收紧正则表达式,例如月份的第一个数字必须是0或1,而一天的第一个数字必须是0、1或2。实际上,这取决于数据是什么样子。

您可以使用,您可以找到第一个正斜杠,并在前面开始两个字符的子字符串,然后取十个字符

string date = str.Substring(s.IndexOf('/')-2, 10);
您可以使用解析子字符串来确保是否得到了正确的子字符串

bool isParsed = DateTime.TryParseExact(date, "dd/MM/YYYY", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out x1);

是的,您可以使用Regex1)此字符串是否包含任何unicode字符?2) 格式总是
dd/mm/yyyy
还是应该取决于区域设置?基于示例\d{2}/\d{2}/\d{4}@ArsenMkrt:Doh,是的,已修复。值得指出的是,这是针对看起来像日期的事情,OP应该检查匹配项以进行检查。@AlexK://当然,可以。如果字符串不包含模式怎么办?正则表达式甚至需要模式,不是吗?您可以通过匹配来检查匹配是否存在以及模式是否成功。成功但正则表达式不会失败,而
子字符串(-3,…
将失败,如果日期不存在,并且给定的子字符串可以被解析以验证