2011-10-30 4 views
0

I가 나는 다음과 같은일치 단어

Doc Name 
Linked Doc 
1_5 or 5 
일치하는 정규식을 작성 힘든 시간을 보내고 있습니다

D_Doc Name L_Linked Doc Q_1_5 

또는

D_Doc Name L_Linked Doc Q_5 

다음 문자열

D_Doc 이름은 항상 표시됩니다. L_ 및 Q_는

이 아닙니다.

문자열은 또한 내가 발견되는 일치 경기 [ 'DOCNAME'] 또는 내가 아는 그래서 어떤 의미 전체 방법으로 일치를 참조 할 수 있도록하고 싶습니다

D_Doc Name Doc Q_1_5 
D_Doc Name Doc Q_5 
D_Doc Name L_Linked Doc 

다음 어느처럼 보일 수 있습니다 그렇지 않습니다.

제안 사항?

+0

출력이 모든 경우에서 정확히 무엇을해야 하는가? – FailedDev

+0

일치 결과에 1 ~ 3 개의 값을 지정하고 싶습니다. 기본적으로 접두어 다음에 오는 모든 것 (문서 이름, 링크 된 문서, 1_5 또는 5) –

+0

이 경우 어떨까요? D_Doc 이름 Doc Q_5 여기 Doc Name Doc, 5 – FailedDev

답변

1

내가 제대로 이해하면, 당신이 원하는 정규식 뭔가 같은 :

^D_(?<D>.*?)(L_(?<L>.*?))?(Q_(?<Q>.*))?$ 

그것은 몇 가지 테스트 입력에 대한 다음과 같은 결과를

Input       D    L   Q 
D_Doc Name L_Linked Doc Q_1_5 Doc Name  Linked Doc 1_5 
D_Doc Name Doc Q_1_5   Doc Name Doc    1_5 
D_Doc Name Doc Q_5    Doc Name Doc    5 
D_Doc Name L_Linked Doc  Doc Name  Linked Doc 
D_Doc Name Doc Q_5    Doc Name Doc    5 
+0

당신의 남자. 매력처럼 작동 :) –

0

아마도이 문제에 대해서는 정규식이 너무 많아서 간단한 string.Split (s, '')을 사용하고 단어를 하나씩 분석 할 것입니다. 어쩌면 마지막 단어를 정규식으로 분석 할 것입니다. 또한 마지막 단어는 쉽게 분할 할 수 있습니다. 배열에서 작업하는 코드를 작성하는 것이 더 간단 할 것 같습니다.

+0

그게 내가 생각하고 이미 시작했지만 단지 얼마나 강력한 정규식이 있는지 또는 그것이 가능할 지/더 빠를지를보고 싶었다. –

+0

정규식은 매우 강력 할 수 있지만 정규식 전문가가 아닌 경우 언젠가 성가 시거나 구문에 표현하는 것이 힘들 수 있습니다. string.Split 공연에 대해 그렇게 나쁘지 않아,이 문자열은 그렇게 크지 않습니다. 최적화 된 정규 표현식 작성은 쉽지 않습니다. –

+0

배열이 나왔다면 코드가 가득 찼습니다. –

0

귀하의 요구 사항을 해독하기가 조금 까다 롭습니다,하지만 난이 그것을 할 것이라고 생각 :

D_(\w+) (\w+) (L_(\w+))?(\w+)((Q_)?(\w+))?

을하고 (I 적절한 이름이다 가정 무엇으로) "명명 된 그룹"을 추가하려면 :

D_(?<Doc>\w+) (?<DocName>\w+) (L_(?<Linked>\w+))?(?<LinkedDoc>\w+)((Q_)?(?<Q>\S+))?

관련 문제