2010-01-30 4 views
1

사람은 내가 정규식을 돕거나 나에게 다음과 같은 문자열을 확인/분할 할 수 있습니다 좋은 해결책 줄 수 :좋은 정규 표현식을 만드는 데 도움이 되나요?

"< 2342Flsdn3Z> < 9124Fsflj20>"

모두가 "<"로 시작하고, (6) caracter는 "F"이고 문자열은 ">"로 끝납니다 "문자열"을 찾을 수있는 Regex를 만들 수 있습니까?

답변

5

이 방법에 대해 : <.{4}F[^>]+>

그것은 어떤 4 개 문자, F 다음에 개방 <과 일치 , > (>이 아닌 다른 것과 일치 시킴)을 종료 할 때까지 아무 것도 없습니다.

string input = "<2342Flsdn3Z><9124Fsflj20>"; 
string pattern = "<.{4}F[^>]+>"; 
foreach (Match m in Regex.Matches(input, pattern)) 
{ 
    Console.WriteLine(m.Value); 
} 

편집 : 좋은 정규식 명확하게 일치시킬 패턴을 지정하는 것입니다 만드는 부분. 예를 들어, 질문을 한 방식으로 특정 세부 사항을 알 수 있습니다. 나는 F가 당신이 지정한 곳이라면 어떤 캐릭터 든 일치시킬 패턴으로 반응했습니다. F는 X이 될 것입니다 후 \d{4} 또는 [0-9]{4}

  • 숯을 : F 전에

    • 숯을 항상 숫자와 길이의 4 될 것입니다 : 당신이했습니다 수있는 더 나은 정규식에 대한

      은 우리에게 여러 가지를 말했다 길이 (6?) 만 숫자와 문자가 될 수 있습니다 [\dA-Z]{6}

    • 케이스를 구분하지 않습니다 : RegexOptions.IgnoreCase (.NET)을 사용하거나 [a-zA-Z]
    • 주 당신의 의도를 사용 : 당신이 그것을 일치하는거야? 내부 가치를 추출하려고 노력하고 있습니까? 쪼개지 않고 무슨 뜻이야? 쪼다 놨어?
    • 당신이 사용하는 언어 지정 등의 C#, 파이썬, 펄,
  • +0

    이 문장뿐만 아니라 숫자와 문자를 일치합니다 - 확인 할 수 있습니다,하지만 당신은 알고 있어야합니다. – tvanfosson

    +0

    @ tvanfosson 동의, 나는 OP가 특정 아니기 때문에 그것을 열어 두었습니다. –

    0

    쉽게 :

    <\d{4}F\w+> 
    

    또는 그냥 문자열을 얻을 :

    (?<=<)\d{4}F\w+(?=>) 
    
    0

    나는 괄호 안의 모든 단어 문자로 필요로하는 몇 가지 가정을 만들고있어 그 (당신이 하나를했다) 후행 대괄호 앞에 적어도 하나이지만 어쩌면 임의의 수의 단어 문자가 있습니다.

    1

    예.

    < <[A-Za-z\d]{4}F[A-Za-z\d]{6}> 내가 항상 여섯 F. 후에는 필요에 따라 반복을 수정할 수 있습니다 그 가정을 만들어

    >에 의해 뒤에 오는 6 글자 또는 숫자 다음에 모든 4 개 문자 또는 F 뒤에 숫자 하였다. 다른 사람이 내 실수에서 배울 수 있도록

    원래 제안 된 솔루션은 유효 코멘트를 보존하기 : [\d\w]{4}F[\d\w]{6}>

    +2

    \ w는 밑줄뿐만 아니라 글자 나 숫자와도 일치합니다. – tvanfosson

    +0

    고맙습니다. –

    관련 문제