2017-02-20 5 views
-3

파일 이름이 아래 패턴이고 파일의 중간 부분 (예 : 20170217154436)을 추출하고 싶습니다. C# (또는 스크립트 작업)에서 어떻게합니까?파일 이름 부분을 추출하는 방법

20170123-100046_20170217154436_A20170217210502 

어떤 도움을 주시면 감사하겠습니다.

+0

항상이 형식입니까? –

답변

3

당신은 정규식을 사용할 수 있습니다,하지만 난 당신이 같은 진행할 수 있다고 생각 : 그것은 당신이 사용하고있는 파일 이름의 형식의 일관성에 달려

String filename = "20170123-100046_20170217154436_A20170217210502"; 
String partToExtract = filename.Split('_')[1]; 
0

. 당신의 예제가 주어진다면 ########-######_##############[email protected]##############이 파일 이름의 형식이라고 가정합니다.

귀하의 경우에는 적합해야하며 배열을 사용하지 않아야합니다.

String fileName = "20170123-100046_20170217154436_A20170217210502"; 
fileName = fileName.Substring(0, fileName.IndexOf("_") - 1); 

이것은 밑줄 앞의 마지막 문자 색인과 0 번째 요소 사이에 부분 문자열을 사용합니다.

0

당신은 두 문자 사이의 문자열을 얻을 정규식을 사용할 수 있습니다 : __ 언급 정규식가 옵션이기 때문에

string myStr= "20170123-100046_20170217154436_A20170217210502"; 
Regex r = new Regex(@"_(.+?)_"); 
MatchCollection mc = r.Matches(myStr); 
Console.WriteLine("Fine name is " + mc[0].Groups[1].Value); 
0

하지만 가장 읽을 수있는 표준이 아니기 때문에 나는 명확하고 뭔가 더 갈 것

const char splitChar = '_'; 

String fileName = "20170123-100046_20170217154436_A20170217210502"; 
int valueIndexStart = fileName.IndexOf(splitChar); 
int valueIndexEnd = fileName.LastIndexOf(splitChar); 


if(valueIndexStart != -1 && valueIndexEnd != -1) 
{ 
    //increment so as to trip splitChar from result 
    valueIndexStart++; 
    valueIndexEnd = valueIndexEnd-valueIndexStart; 
    return fileName.Substring(valueIndexStart, valueIndexEnd); 
}else{ 
    //throw exception? 
} 

물론이 형식의 표준 방식을 고려해야합니다. 중간 부분이 당신이 찾고있는 부분이라고 말하면, 항상 3 부분이있을 것입니까? 더 많거나 적은 구분 기호 문자를 찾으면 어떻게됩니까? 이 캐릭터가 가치 캐릭터 내에있을 수 있습니까? 나는 잘못된 위양성이나 네거티브 가능성을 처리하는 방법에 대해 알려줄 것입니다.

0

답장을 보내 주셔서 감사합니다. 나는 아래와 같은 것을 시도해 보았다.

String fileName = "20170123-100046_20170217154436_A20170217210502"; 
fileName = filename.Substring(filename.IndexOf("_") + 1); 
string fname; 
fname=fileName.Substring(0, fileName .IndexOf("_")) 

이렇게하면 "20170217154436"이됩니다.

관련 문제