使用正则表达式C#3.0从字符串中获取相关信息

时间:2010-06-15 08:08:43

标签: c#-3.0

我收到了一些文件名,可以像

一样
<filename>YYYYMMDD<fileextension>

满足上述模式的一些有效文件名在

xxx20100326.xls, 
xxx2v20100326.csv, 
x_20100326.xls,
xy2z_abc_20100326_xyz.csv,
abc.xyz.20100326.doc,
ab2.v.20100326.doc,
abc.v.20100326_xyz.xls

在以上定义的案例中,我只需要提取日期。因此,对于所有情况,输出将 20100326

我正在努力实现同样但没有运气。

这是我到目前为止所做的事情

string testdata = "x2v20100326.csv";

string strYYYY = @"\d{4}";
string strMM = @"(1[0-2]|0[1-9])";
string strDD = @"(3[0-1]|[1-2][0-9]|0[1-9])";           
string regExPattern = @"\A" +  strYYYY + strMM + strDD +  @"\Z";
Regex regex = new Regex(regExPattern);
Match match = regex.Match(testdata);
if (match.Success)
{
  string result = match.Groups[0].Value;
} 

我正在使用c#3.0和dotnet framework 3.5

请帮忙。这是非常紧急的

提前致谢。

4 个答案:

答案 0 :(得分:1)

这个获取字符串中的最后一个日期。

        var re = new Regex("(?<date>[0-9]{8})");
        var test = "asdf_wef_20100615_sdf.csv";
        var datevalue = re.Match(test).Groups["date"].Value;
        Console.WriteLine(datevalue); // prints 20100615

答案 1 :(得分:1)

试试这个:

        DateTime result = DateTime.MinValue;
        System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;

        var testString = "x2v20100326.csv";
        var format = "yyyyMMdd";
        try
        {
            for (int i = 0; i < testString.Length - format.Length; i++)
            {
                if (DateTime.TryParseExact(testString.Substring(i, format.Length), format, provider, System.Globalization.DateTimeStyles.None, out result))
                {
                    Console.WriteLine("{0} converts to {1}.", testString, result.ToString());
                    break;
                }
            }
        }
        catch (FormatException)
        {
            Console.WriteLine("{0} is not in the correct format.", testString);
        } 

答案 2 :(得分:0)

您可能需要将月份和日期表达式分组:

((1[0-2])|(0[1-9))
((3[0-1])|([1-2][0-9])|(0[1-9]))

答案 3 :(得分:0)

字符\ A和\ Z-分别从字符串的开头和结尾开始。 我认为你需要这样的模式:

string regExPattern = @"\A.*(?<FullDate>" +  strYYYY + strMM + strDD +  @").*\..*\Z";

“。*” - 开头的任何符号 “。* \ .. *” - 点,点和点后面的任何符号之前的任何符号

获取完整日期:

match.Groups["FullDate"]