我收到了一些文件名,可以像
一样<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
请帮忙。这是非常紧急的
提前致谢。
答案 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"]