拥有以下字符串:
我想将字符串分成三部分,例如在第一句中:
在第三句中:
对于第一句话,我尝试了以下正则表达式:
^((\w+[\.\s]){5})(\d{2}\.\d{2}\.\d{4})(.+)$
如果我将5更改为+,则无法正常工作。
^((\w+[\.\s]){+})(\d{2}\.\d{2}\.\d{4})(.+)$
我怎样才能做到这一点?
PD:在使用C#应用程序完成实际工作之前,我在Sublime中进行了测试。答案 0 :(得分:1)
您可以将命名组与此正则表达式一起使用:
^(?<name>.*)(?<date>\d{2}\.\d{2}\.\d{4})(?<file_ext>.+)$
string input =
@"AAA.BBBBBBBB et CCCCCC DDDDDDD 31.03.2012.xlsx
AAA.BBBBBBBB ZZZZ et CCCCCC UUUU DDDDDDD 15.02.2015.xlsx
AAA.BBBBBBBB DDDD et CCCCCC 23 DDDDDDD 03.11.2017.xlsx";
string pattern = @"^(?<name>.*)(?<date>\d{2}\.\d{2}\.\d{4})(?<file_ext>.+)$";
foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Multiline))
{
// for each line you can use:
// match.Groups["name"] , match.Groups["date"] and match.Groups["file_ext"]
}
答案 1 :(得分:0)
由于日期总是相同的长度,因此您不需要正则表达式。我不喜欢使用正则表达式,因为它们很慢。
你可以将它放在一个循环中,我为你提供的每个字符串尝试它可以正常工作。我不是最干净的代码,但是你明白了。
string fileString = "AAA.BBBBBBBB ZZZZ et CCCCCC UUUU DDDDDDD 15.02.2015.xlsx";
string fileName = fileString.Substring(0, fileString.Length-15);
int findExtensionDot = fileString.LastIndexOf(".");
string fileExtension = fileString.Substring(findExtensionDot, fileString.Length - findExtensionDot);
string getDate = fileString.Substring(fileName.Length, fileString.Length - findExtensionDot + 5);
Console.WriteLine(fileName);
Console.WriteLine(fileExtension);
Console.WriteLine(getDate);
结果如下:
fileName: AAA.BBBBBBBB ZZZZ et CCCCCC UUUU DDDDDDD
fileExtension: .xlsx
getDate: 15.02.2015