2011-04-20 5 views
1

내가 파이썬 정규식으로 다음 줄과 일치하기 위해 노력하고있어 :파이썬 정규식 문제

RAA RAA 

RAA RAA/OOO OOO 

RAA RAA/OOO OOO/ROCKY 

이러한 문자열은 항상 RAA RAA moves over there.가 일치하지 않을 자신의 라인에 있어야합니다.

나는 RegExr를 사용하여이 정규식 함께했다 :

^([A-Z]*([ ]?)*([A-Z]?)*([ \/]?)*)*$ 

이것은 그것이 내가 아무 생각도 없어 RAA RAA moves over there.

일치하려고하면 응답하지 파이썬의 원인 그러나 모든 다른 라인에 맞게 잘 작동 왜. 통찰력을 가지고있는 정규 표현식 전문가가 있습니까?

+0

"정지"를 정의하십시오. 얼마나 기다렸습니까? 원 - 문자 (-) 문자 클래스는 중복되고'*'는'? '을 의미합니다 (예를 들어'([]?) *'는'\ *'가 역 슬래시를 나타내지 않습니다. mark'd-up가 아닌 텍스트를 가려 보이지 않도록). – delnan

+4

대문자, 슬래시 및 공백만으로 구성된 행을 일치 시키려고합니까? 네가 어떤 재산을 쓴다는 건 나에게 분명하지 않아? – YXD

+3

"이 세 줄 중 하나와 일치하십시오."라고 말한 다음 더 많이 일치하는 정규식을 제공했습니다. 요구 사항에 대해 구체적으로 설명하십시오. –

답변

0

전체 패턴에 선택적 일치가 가득하기 때문에 많은 역 추적이 발생하여 교수형에 처해질 수 있습니다. 것입니다, 불필요한 캡처 그룹 않고,

^([A-Z]+([ ]?)+([A-Z])*([ /])*)*$ 

클리너 패턴 : 같은, 그것은 의미가 필수 일치를 사용해보십시오

^([A-Z]+[ ]?)+([A-Z]+[ /]*)*$ 

공지 사항을 그 + 대신 *의 보장하지만 사용 전체 패턴을 선택적으로 만들고 정규식 엔진에 과세하지 말고 하나 이상의 문자가 일치해야합니다.

+0

이것은 확실히 필요한 것입니다. 내 정규식 기술이 비참하게 불만하여이 조언을 많이 주시면 감사하겠습니다. –

2

정규식은 너무 일반적입니다 : 원하는 것 이상으로 일치 할뿐만 아니라 정규 표현식 정규 표현식이 다른 조합을 시도하기 위해 지속적으로 무의미하게 역 추적 할 많은 수의 *을가집니다. 나는 조합 트리 작업을 시도하지는 않았지만 일치하지 않는 라인 당 적어도 수천 번의 시도가 있습니다.

특정 더 나은, 그리고하고 있는지 당신은 당신이 최선을 다하고있어 무엇을 통해 역 추적하지 않는 더 나은 : 하위 문자열이 일정하지 않은 경우, 당신은 가능한 완벽로 지정해야

^RAA RAA(?: \/ OOO OOO(?: \/ ROCKY)?)?$ 

불필요한 역 추적을 피하십시오.

(?:은 작은 최적화입니다. 나중에 괄호로 묶은 일치 항목을 기록하지 마십시오. 하위 문자열이 필요한 경우 /을 원하지 않으므로 부분 만 캡처하면됩니다. want).