2014-12-01 1 views
0

이미지의 제목 인 문자열을 정리하려고합니다. 관련없는 숫자를 삭제하고 싶지만 (예 : 1923 또는 2010) 또는 관련 날짜 (예 : 20/10/2012 또는 6 월 12 일)와 같은 날짜 시퀀스를 보존하고 싶습니다.특정 날짜 시퀀스를 제외하고 C#의 문자열에서 모든 숫자 제거

센트럴 역 1929 [12l89]

[NZ1253] 베시 구덩이 드리프트 광산

경로 헤드 12 :

여기 예를 들어 내가 제거하고 싶은 것을 표시하기 위해 괄호를 사용했다 2012년 6월

[4722] 그린 필드 20/10/2012

위의 예에서 4722는 유효한 연도로 간주되지 않으며 날짜는 1900 년에서 현재 날짜의 범위이므로 19- 또는 20- 시작하고 두 개의 진행 숫자로 시작하십시오.

System.Text.RegularExpressions.Regex trimmer = new System.Text.RegularExpressions.Regex(@"\s\s+"); 

그러나 다른 사람을 보존하는 방법을 확실하지 오전 :

나는 다음과 같이 정규식을 사용하여 모든 숫자를 제거하는 방법을 이해합니다.

+2

4722가 유효한 날짜가 아닌 이유는 무엇입니까? 잠재시기가 유효하지 않은시기는 언제입니까? – Default

+0

먼저 무의미한 번호를 정의해야합니다. 당신이 쓰는 것에서 나는 날짜뿐만 아니라 날짜 범위에 대해서도 그렇다고 생각합니다. @Default와 마찬가지로, 4722 년이 유효한 연도가 될 수 있습니다. 자세한 내용을 알려줘야합니다. – t3chb0t

+0

이 경우 이미지는 1900 년대 또는 2000 년대에있을 것이므로 그 연도와 관련된 다른 것은 유효하지 않습니다. – shapingstuff

답변

1

솔직히 말해서, Regex와 함께이 작업을 수행하지 않을 것이며, 그 작업은 읽을 수 없게되고 버그로 처리 될 것입니다.

대신 입력으로 한 줄 씩 가져 와서 토큰 화하고 작은 자체 포함, 테스트 가능한 단위 (규칙)로 필요한 모든 논리를 제공합니다.

그런 다음 "규칙"에서 훨씬 더 제한적인 방법으로 정규 표현식을 사용할 수 있습니다 - 예를 들어 정규식 :

[A-Z]+(19|20)\d{2} 

NZ1982하지만 NZ1253 일치합니다.

당신의 규칙은 상당히 복잡 할 필요가 있습니다. 12th에 대한 일치는 다음 토큰을 기다릴 필요가 있습니다. 만약 그것이 한 달 이름 일 수있는 것처럼 보이면, 다시 기대하고 다음을 찾으면 다음 토큰을 기다려야합니다. 토큰은 1 년처럼 보이고 몇 가지 논리를 수행합니다.

각 규칙을 정확하게 정의 할 수있는 경우 각 규칙의 코드는 매우 관리하기 쉽습니다.

+0

감사합니다. 나는 모든 번호를 제거하기 전에 REGEX를 사용 해본 적이 없기 때문에 나는 그걸 알아볼 것입니다.위에서 언급 한 날짜와 같은 특정 사례를 보존하는 간단한 방법이 있지만 편지가 첨부 된 다른 모든 번호와 번호는 삭제하십시오. 즉 NZ1253 또는 43jk234i를 제거하고 REGEX를 NZ1982에 보존 하시겠습니까? – shapingstuff

관련 문제