2017-04-20 45 views
1

具有下列字符串:正則表達式如何重複捕獲的組?

  • AAA.BBBBBBBB等CCCCCC DDDDDDD 31.03.2012.xlsx
  • AAA.BBBBBBBB ZZZZ等CCCCCC UUUU DDDDDDD 15.02.2015.xlsx
  • AAA.BBBBBBBB DDDD等CCCCCC 23 DDDDDDD 03.11.2017.xlsx

我想在字符串中的三個部分的第一句話拆分,例如:

  • AAA.BBBBBBBB等CCCCCC DDDDDDD
  • 31.03.2012
  • .XLSX

在第三句:

  • AAA.BBBBBBBB DDDD等CCCCCC 23 DDDDDDD
  • 二〇一七年三月一十一日
  • .xlsx

對於第一句話我嘗試以下的正則表達式:

^((\w+[\.\s]){5})(\d{2}\.\d{2}\.\d{4})(.+)$ 

如果我改變5 +,它不工作。

^((\w+[\.\s]){+})(\d{2}\.\d{2}\.\d{4})(.+)$ 

我該如何做到這一點?

PD:我在從C#應用程序開始真正的工作之前正在測試Sublime。

+0

刪除'{}'括號中只使用'+'標誌所以'^((\ w + [\。\ s])+)(\ d {2} \。\ d {2} \。\ d {4})(。+)$'。順便說一句,當你想測試你的正則表達式我建議你https://regex101.com/ – Gondil

+2

你不需要一個正則表達式,左邊的15個字符總是相同的長度 – prospector

+0

SublimeText 3使用PCRE引擎和C#使用.NET - 只有當你的模式是基本的時候纔可以。 –

回答

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 
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"] 
} 
+0

偉大的解決方案。 – csharpbd