2011-08-09 2 views
0
나는 시도하고이 정규식 알아 내기 위해 다음과 같은 테스터를 사용하고

: ( : http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx그룹 정규 표현식

내 입력 : 123stringA 456 stringB

내 패턴을 [0-9] {3}) (. *?)

패턴은 결국 날짜가되지만이 질문을 위해 간단하게 유지하고 간단한 입력을 사용합니다.

나는이 패턴을 이해하는 방법, 그것은 "나에게 3 개 개의 숫자를 줄 정보 [0-9] {3}, 어떤 종류의 문자의 수에 따라. *, 다음 경기?

에 도달 할 때까지 무엇 123
      그룹 - 2 - stringA
Match2

      그룹 1
경기 : 나는 /이 테스트에서 기대 원하는 것은 2 개 그룹 2 경기 각이다 365,583,210     그룹 1-456
      그룹 2 - 어떤 이유 stringB

, 나는 제공된 링크에서 테스터는 두 번째 그룹이 있음을 볼 수 있지만, 빈오고 있어요. 이전에 PHP로이 작업을 수행했지만 설명대로 작동하는 것처럼 보였지만 C#에서는 다른 결과가 나타납니다. 당신이 제공 할 수있는 도움을 주시면 감사하겠습니다.

나는이 여러 라인을 확장 할 수 있음을 유의 ...

  • EDIT *

여기에 실제 입력이있다 : 2011-08-09 09 : 25 : 57,069 [9] Orchard.Environment.Extensions.ExtensionManager -로드 오류 확장 2011-08-09 09 : 25 : 57,493 [8] Orchard.Environment.Extensions.ExtensionManager 경기

1 내가 얻을 꿔 : 2011-08- 09 09:25:57 및,, 069 [9] Orchard.Environment.Extensions.ExtensionManager -로드 오류 확장

매치 2

: 2011-08-09 9시 25분 57초 및 , 493 [8] Orchard.Environment.Extensions. ExtensionManager

나는 오류가 발생한 날짜와 첫 번째 그룹은 3 일치 그것을

+1

당신이 비주얼 스튜디오에서 테스트 있는지 확인? – BoltClock

+1

@tjans 이전 질문에 대한 대답을 받아 들여야합니다. (가장 도움이되는 옆의 체크 표시를 클릭하십시오.) – dlras2

답변

2

과 함께 갔다 세부 사항을 하나 개의 거대한 텍스트 파일의 오류 로그 파일을 구문 분석하고 유지하는 좋은 방법을 찾기 위해 노력하고있어 두 번째 그룹은 나머지 문자열과 일치합니다. .*?이 나머지 패턴과 일치하지 않도록 패턴에 아무 것도 없기 때문에 문자열의 r.

수정 : .*?이 빈 문자열과 일치하지 않도록 패턴에 아무 것도 없으므로 두 번째 그룹이 빈 문자열을 찾습니다.

+0

아, 그럼 다음 경기가 시작되기 전에 오는 구분 기호를 제공해야합니다 ... – tjans

+0

'*?'는 - 문자열의 나머지 부분과 일치하지 않을 것입니다. _fully_ – Mrchief

+0

@Murchief : 죄송합니다. 네가 옳아. – MRAB

1

.*은 0 번 이상을 의미합니다. ? 최소 횟수를 찾으므로 0으로 일치하는 항목을 최소값으로 선택합니다.

이 패턴을 시도 ([0-9]{3})([a-zA-Z]*)

+0

'*?'는 비 탐욕적입니다. – Mrchief

+0

@Murchief, OK, 내가 말한 것이 그게 아닌가요? MSDN'*에서? 이전 요소를 0 번 이상 반복하지만 가능한 한 적은 횟수 만 일치시킵니다. ' – Kratz

+0

네, 그러나 OP가 알파가 아닌 모든 문자를 원하므로 패턴이 충분하지 않습니다. – Mrchief

0

도구가 당신을 제공하지만 닷넷에서 작동이 다른 패턴으로 전환 할 수 있습니다 이유는 확실하지

([0-9]{3})([^0-9]*) 

http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

설명 :

이전 패턴에서, nongreedy v ersion은 0 개의 문자와 일치했습니다. 새에서

, [^0-9]의 범위 0-9 이외의 문자 (부정 ^ 지정을 참고)와 일치했다.

업데이트 : (주석), 패턴이 영업 이익은 어떻게 원하는 것을 가정 (의 추측으로 변경 실제 입력 문자열을 감안할 때 :

,([0-9]{3})([^\n]*) 

http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

+0

흥미 롭군요, 실제로 작동합니다 ... 왜 설명 할 수 있겠습니까? – tjans

+0

다음 내용을 적용하려고합니다. 2011-08-09 09 : 25 : 57,069 [9] Orchard.Environment.Extensions.ExtensionManager - 확장로드 오류가 발생했습니다. 2011-08-09 09 : 25 : 57,493 [8] Orchard.Environment.Extensions.ExtensionManager - 확장로드 오류가 발생했습니다. – tjans

+0

내 대답이 업데이트되었습니다. – Mrchief

0

를 귀하의 의견에 따르면, 25 : 57,069 [9] Orchard.Environment.Extensio, 이것은 당신이

2011-08-09 09 일치 할 것입니다 ns.ExtensionManager - 오류로드 확장 2011-08-09 09 : 25 : 57,493 [8] Orchard.Environment.Extensions.ExtensionManager -로드 오류 확장이 표현식은 첫 번째 캡처에 날짜와 일치합니다

그룹과 나머지는 다음 날짜까지 또는 두 번째 캡처 그룹에서 문자열의 끝까지.

(\d{4}(?:-\d{2}){2})(.*?)(?=(?:\d{4}(?:-\d{2}){2}|$)) 

here on Regexr

+0

인내심을 가져 주셔서 감사합니다 ... 원래 질문을 업데이트했습니다. 나는이 기회를 줄 것이다 ... – tjans

+0

이 하나가 작동하지 않는 것 ... 그 패턴을 실행할 때 나는 0 경기를 얻는다 ... – tjans

+0

Regexr에서 작동하는 방법, 어떻게 사용합니까? 한 가지 생각이 나면 다음과 같이 정규 표현식을 C#으로 작성해야합니다. @ "(\ d {4} (? : - d d {2}) {2}) (? *?) (? = \ d {4} (? : - \ d {2}) {2} | $)) ". @가 없으면 이중 탈출이 필요합니다. – stema