2013-08-19 3 views
3

정규식을 사용하여 3 개의 고유 한 문자를 일치시키는 방법을 찾으려고합니다. 이중 문자 집합.파이썬 정규 표현식을 사용하여 이중 문자 매칭

r".*([a-z])\1.*([a-z])\2.*([a-z])\3.*"  

을하지만 그 두 글자에 대한 독특한 세트 고려하지 않습니다 : 지금까지 나는이 있습니다. 미리 감사드립니다 =)

+0

고유 집합의 예는 무엇입니까? – Himanshu

+0

제공된 정규 표현식을 적용한 후에 고유성을 검사하는 방법은 어떻습니까? – alecxe

+0

트리플 (또는 광석) 문자는 어떻게됩니까? 그들은 허용됩니까? – Tomalak

답변

4

어쩌면 이렇게 할 수 있을까요? 나를 위해 일하는 것 같습니다.

r".*([a-z])\1.*((?=(?!\1))[a-z])\2.*((?=(?!\1))(?=(?!\2))[a-z])\3.*" 

(?=expr)non-consuming regular expression이며 (?!expr) 정규식 NOT 연산자이다.

+0

감사합니다!, 완벽하게 작동합니다! – user2696287

+0

@Tigran 마지막으로'\ 1'과 비교하는 것만으로 충분하지 않습니까? 이후, 우리는'\ 1'과'\ 2'가 다르다는 것을 확인했습니다. – thefourtheye

+0

@ thefourtheye, 그 경우 \ 3은 \ 2와 같을 수 있으며 용납 할 수 없습니다. –

0

(? = expr)은 소비하지 않는 정규식 이지만 (?! expr)도 비 소비자 식입니다. 이 시간은 같지 않음을 대신합니다.

'같음'에 'not'를 포함하면 아무 것도 추가되지 않습니다. 그것도없이 작동합니다. 그러나 소비하지 않는 표현을 쌓는 것이 항상 효과가있는 것은 아니며, 단일 소비가 없으면 'or'('|'문자)를 사용하여 작업을 수행합니다.

그래서

R "([AZ]) \ 1 ([AZ]) \ 2 .. (\ 1?!). (\ 1 |?! \ 2) ([AZ]) \ 3. "

일부 중괄호도 정리했습니다. 나는 이것이 더 깨끗하고 버전들 사이에서 더 신뢰할 수 있다고 생각한다.

관련 문제