파일 이름의 일부를 추출하려면정규식 내가 텍스트 파일과 같은 형식이
나는 일관되게 ****** COMP의 004A7001 번호 20100104 (날짜)에 R을 추출해야R156484COMP_004A7001_20100104_065119.txt
및 065119 번호는 신경 쓰지 마라. 문제는 모든 파싱 된 파일이 정확한 명명 규칙을 가지고 있지 않다는 것입니다. 일부는 다음과 같이 할 수 있습니다. (예 004A7001)
R168166CRIT_156B2075_SU2_20091223_123456.txt
또는
R285476COMP_SU1_125A6025_20100407_123456.txt
그래서 어떻게 내가 항상 시리얼 것을 얻고, 날짜 (예를 보장하기 위해 대신 분할 regex
를 사용할 수 20,100,104.), R ****** COMP (또는 CRIT) ???
내가 지금하는 일은 다음과 같지만 첫 번째 예와 같이 형식이 지정된 파일 만 가져옵니다.
if (file.Count(c => c == '_') != 3) continue;
하고 더 아래 코드에서 내가 가진 :
string RNumber = Path.GetFileNameWithoutExtension(file);
string RNumberE = RNumber.Split('_')[0];
string RNumberD = RNumber.Split('_')[1];
string RNumberDate = RNumber.Split('_')[2];
DateTime dateTime = DateTime.ParseExact(RNumberDate, "yyyyMMdd", Thread.CurrentThread.CurrentCulture);
string cmmDate = dateTime.ToString("dd-MMM-yyyy");
업데이트 :에 나는 곳은 지금 - 나는 실제 날짜 형식에 RNumberDate를 구문 분석 오류가 발생합니다. "암시 나는 완전히 문자열을 구문 분석 규칙을 이해하지 못하는 '문자열'
string RNumber = Path.GetFileNameWithoutExtension(file);
Match RNumberE = Regex.Match(RNumber, @"^(R|L)\d{6}(COMP|CRIT|TEST|SU[1-9])(?=_)", RegexOptions.IgnoreCase);
Match RNumberD = Regex.Match(RNumber, @"(?<=_)\d{3}[A-Z]\d{4}(?=_)", RegexOptions.IgnoreCase);
Match RNumberDate = Regex.Match(RNumber, @"(?<=_)\d{8}(?=_)", RegexOptions.IgnoreCase);
DateTime dateTime = DateTime.ParseExact(RNumberDate, "yyyyMMdd", Thread.CurrentThread.CurrentCulture);
string cmmDate = dateTime.ToString("dd-MMM-yyyy")
@jake : 제목에 태그를 넣지 마십시오. –
나는 그것을 기억할 것이다. –