2012-04-10 3 views
-1

나는 아래의 내용과 같이 문자열 정보로 연도 정보 만 선택하고 싶습니다. 이 입력 문자열을 감안연도 정보를 문자열 값으로 가져 오는 방법은 무엇입니까?

:

예를 들어, 주요 문제점 중 하나는 (관찰자 역학 빠르게 수치 어려움이 발생할 상태 피드백 제어기, 보다 것으로 가정한다는 스트롬이고 and Wittenmark, 1997). 더구나 프로세스 제약 조건이 활성화되면 폐 루프 제어 성능이 크게 저하되는 은 제어 시스템을 지배하는 종류의 비선형 성이 있음을 명확하게 목격하게됩니다 (Tenny, Rawlings 및 Wright, 2004). 따라서 상기 문제를 해결할 수있는 방법을 개발하는 것이 필요하다.

19972004을 추출하고 싶습니다.

주 :

  1. 년도 정보는 네 자리 숫자에서 발생
  2. 대부분의 아마 그것은 단락 내의 모든 장소에서 발생할 수 마침표 (기간) 또는 가까운 브래킷
  3. 로 끝나는
+2

"아마도"도움이되지 않습니다. 그보다 더 확실한 것이 필요합니다. –

+0

@KshitijMehta +1. 그리고 아마도 4 자리 모두가 대괄호로 끝나는 것은 아니며 실제로는 '연도'입니다. –

+0

당신은이 정규 표현식을 사용하고 싶을 것입니다 ... – Jack

답변

0

음, 다음 정규식을 제안합니다. 다음은 또한 패턴과 일치하는 편리한 방법입니다 그래서

((19|20)\d{2}) 

또는

\b((19|20)\d{2})\b 

.NET에서 명명 된 그룹이 지원됩니다.

\b(?<Years>(19|20)\d{2})\b 

참고 : 네 자리 숫자에 대한이 정규식 검색 수와 처음 두 19 또는 20해야합니다. 이전 년이있을 수 경우에 당신은 그들을

\b(?<Years>(17|18|19|20)\d{2})\b 
+0

제공된 견본이 ... 견본 일뿐입니다. 당신은 19 또는 20으로 시작하는 년보다 포괄적이어야합니다. –

1
var years = Regex.Matches(input, @"\D(\d{4})\D") 
    .Cast<Match>() 
    .Select(m => m.Groups[1].Value) 
    .ToArray(); 
0

당신 년간 전혀 제한됩니다 포함 할 수 있습니다? 1900 년이 넘은 건 아니야? 아니면 1800? 이렇게하면 좀 더 정확하게 할 수 있습니다.

Regex regex = new Regex(@" (19|20)\d\d\))") 

MatchCollection years = regex.Matches(your_input); 

생각 ) 선행 공간이 1900 년대 또는 2000 년대의 날짜와 일치하고,로 끝납니다 정규식.

그런 다음 일치하는 모든 인스턴스를 가져 오는 MatchCollection을 반복 할 수 있습니다.

0

시도해보십시오. \d\d\d\d[\)\]\.] 정규식

) 또는 ] 또는 .으로 끝나는 4 자리 숫자를 모두 검색합니다.

0

정규 표현식을 사용할 수 있습니다. ^[12][0-9]{3}$과 같은 것이 귀하의 연도를 확인합니다.

Match match = Regex.Match(input, "^[12][0-9]{3}$"); 
+0

좋은 패턴이지만'^'와'$'를 제거하십시오. 문자열은 4 기호보다 길며 패턴은 줄의 모든 위치에서 발생할 수 있습니다. 또한 OP는 유효성을 확인하기를 원하지 않고 검색하기를 원합니다. – Oybek

관련 문제