2013-03-12 4 views
-1

문자열을 사용하여 두 가지 작업을 수행해야합니다.
파일 확장자를 제거하십시오. B. 날짜에서 '-'을 제거하십시오.문자열에서 날짜 및 파일 확장자에서 슬래시를 제거하십시오.

업로드 된 문자열의 예는 다음과 같습니다

ifrs_au-cor_2013-03-12.xsd

난 그냥에 대체 할 수 없다 '-'의 첫 번째 부분 때문에 문자열에는 제거하지 않으려는 '-'만 포함되며 날짜 만 삭제됩니다. 그러나 날짜는 항상 YYYY-MM-DD 형식이어야하며 확장자가 끝에옵니다.

String xsdfnameNoExtNoSlash = xsdfname; 
int fileExtPos = xsdfname.LastIndexOf("."); 
if (fileExtPos >= 0) 
    xsdfnameNoExtNoSlash = xsdfname.Substring(0, fileExtPos); 

한 번에 이러한 작업을 모두 할 수있는 방법이 있나요 :

현재 난 단지 문자열에서 확장명을 제거하려면 다음 코드가?

+0

여기 정규 표현식이 도움이 될 것 같지만, 솔직히 말해서 1 가지에서이 작업을 수행하면 어떤 이점이 있습니까? 나는 이것이 정말로 필요하다고 생각하지 않는다. –

+0

전혀 다른 요구 조건이 아닙니다. 두 개의 다른 문자열에는 문제가 없습니다. 하나의 정규식이나 그것을 수행 할 수있는 방법이 있는지 궁금합니다. –

답변

2
var name = Path.GetFileNameWithoutExtension(name); 
return Regex.Replace(name, @"(?<!\d)(\d\d\d\d)-(\d\d)-(\d\d)(?!\d)", "$2$3$4"); 

이 첫 번째는 확장 (있는 경우)를 제거하고 모든 날짜를 발견하고 그들로부터 슬래시를 제거합니다.

정규 표현식은 lookahead와 lookbehind를 사용하여 "92012-01-019"와 같은 것이 날짜로 간주되지 않도록합니다. 숫자 이외의 것은 날짜 경계로 허용됩니다. 예를 들어, "92012-01-019" 일 경우 실제로 "9201201019"로 변경해야합니다. 그러면 lookahead/lookbehind를 제거하고 (교체 문자열의 숫자를 변경할 수 있습니다) .

확장 기능을 별도의 단계로 제거하는 것이 가장 쉬운 방법이라고 생각합니다.

+0

니스, 그리고 내 의견으로는 당신의 결론도 정확합니다. 그것을 정규식으로하는 것은 거의 읽을 수 없게 만든다. –

+0

코드를 실행하면 나에게 : ifrs_au-cor_0312 $ 4 - 그 해를 제거하고 $ 4를 추가한다. –

+0

신경 쓰지 마세요, 그 $ 1 $ 2 $ 3 –

0
string noslash = withslash.Replace('-', ''); 
string noextension = Path.GetFileNameWithoutExtension(xsdfname); 
+0

또한 첫 번째 단어를 바꿀 것입니다. –

+0

OP not not all '-' – Win

+0

Replace 메서드를 여기에 적용해도 문자열 버전은 빈 문자 리터럴이 없으므로 사용해야합니다. 자세한 내용은 http://stackoverflow.com/questions/3670505/why-is-there-no-char-empty-like-string-empty를 참조하십시오. – Sam