使用c#从长字符串中可靠地提取特定的日期模式

使用c#从长字符串中可靠地提取特定的日期模式,c#,asp.net,C#,Asp.net,如何可靠地每次提取“20130901”-见下面的代码?如果有匹配项,我可以解析为日期。其格式始终为yyyyMMdd string s = "X23_CBW_13CP05AUGR1_20130901000000"; Regex rg = new Regex("\\d+"); Match m = rg.Match(s); 非常感谢将正则表达式更改为仅提取8位数字序列,然后解析精确的第一个匹配: string s = "X23_

如何可靠地每次提取“20130901”-见下面的代码?如果有匹配项,我可以解析为日期。其格式始终为yyyyMMdd

            string s = "X23_CBW_13CP05AUGR1_20130901000000";
            Regex rg = new Regex("\\d+");
            Match m = rg.Match(s);

非常感谢

将正则表达式更改为仅提取8位数字序列,然后
解析精确的
第一个匹配:

string s = "X23_CBW_13CP05AUGR1_20130901000000";
Regex rg = new Regex(@"\d{8}");
Match m = rg.Match(s);


if (m.Success)
{
    DateTime d = DateTime.ParseExact(m.Value, "yyyyMMdd",
                      CultureInfo.InvariantCulture);
    // ... 
    // Do something with your value here
}
高级实施又称过度杀伤力

如果需要引擎查找第一个有效的日期字符串,即使之前有其他长数字序列,也可以实现:

string s = "X23CBW13992238455222348CP05AUGR120130901000000";
Regex rg = new Regex(@"\d{8,}");
MatchCollection mc = rg.Matches(s);

DateTime? d = null;


foreach (Match m in mc)
{
    string digits = m.Value;

    for (int n = 0; n < digits.Length - 8; n++)
    {
        try
        {
            d = DateTime.ParseExact(digits.Substring(n, 8), "yyyyMMdd",
                CultureInfo.InvariantCulture);
            break;
        }
        catch
        { }
    }

    if (d != null)
        break;
}


if (d != null)
{
// Use your value here
}
string s=“x23cbw13992238455222348cp05augr1203091000000”;
Regex rg=new Regex(@“\d{8,}”);
MatchCollection mc=rg.匹配项;
约会时间?d=零;
foreach(在mc中匹配m)
{
字符串数字=m.值;
对于(int n=0;n
您可以为此使用子字符串

     string ans;

     string input="X23_CBW_13CP05AUGR1_20130901000000";

        int index = input.LastIndexOf("_");
        ans = input.Substring(index+1,8);

        Console.WriteLine("Substring: {0}", ans);
希望这对你有帮助

试试这个模式

/\d{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|[3][0-1])/g

总是yyyyMMdd,但是字符串的其余部分呢?日期模式可以出现在任何地方,还是仅仅出现在结尾?它总是跟在最后一个下划线后面吗?我想避免使用第三个下划线之类的东西。我需要它从左边开始,找到0-9之间的8个连续数字,然后返回8个字符的字符串,如20130901。这样,它可用于许多文件名yyyyMMdd可以出现在任何地方,但yyyyMMdd不会重复,但有00000个字符。我假设您的日期总是在最后一个“uuu”符号之后,并且日期格式总是yyyyymmdvery简单但没有帮助。