2017-04-20 2 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
  • 2012년 3월 31일
  • .XLSX 세 번째 문장에서

:

  • AAA.BBBBBBBB DDDD 동부 CCCCCC 23 DDDDDDD
  • 2017년 3월 11일
  • xlsx
첫 문장에 대한

나는 다음과 같은 정규 표현식 시도 : 나는 +의 5를 변경하는 경우

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

를, 그것은 작동하지 않습니다.

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

어떻게하면됩니까?

PD : C# 응용 프로그램에서 실제 작업을 수행하기 전에 Sublime에서 테스트하고 있습니다.

+0

제거'{}'브래킷을 사용하는 단지'+'기호 그래서^((\ w + [\. \ s]) +) (\ d {2} \. \ d {2} \. \ d {4}) (. BTW 때 regexes 테스트하려는 https://regex101.com/ – Gondil

+2

당신은 정규식이 필요하지 않습니다 왼쪽에있는 15 문자는 항상 동일한 길이가 될 것입니다 – prospector

+0

SublimeText 3 PCRE 엔진을 사용하고 C#은 .NET을 사용합니다. 패턴이 기본이 될 경우에만 OK입니다. –

답변

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

관련 문제