2011-01-26 3 views
3

특정 문자 시퀀스와 일치하지 않는 문자열을 찾고 싶습니다. 예를 들어 :빠른 파이썬 정규식 질문 : 부정 된 문자 집합을 일치 시키십시오.

뭔가

같은
REGEX = r'[^XY]*' 
내가 서로 옆에 X와 Y를 제외한 모든 문자가 문자열을보고 싶습니다

... 정규식 위부터 작동하지 않습니다 그것은 X와 Y를 따로 차단합니다.

+0

파이썬 정규식에 대해서는 많이 알지 못합니다. 또는'*'를'+' –

+1

으로 바꾸어보십시오. http://nmichaels.org/regular.py에서 확인했는데 제대로 작동하는 것 같습니다. 당신은 그것을 시험해 볼 문자열을 줄 수 있습니까? – nmichaels

+0

또한 X와 Y를 별도로 차단하는 것에 대해 어떤 의미 인지도 알지 못합니다. 이 정규식은 * Xs와 Ys를 무시할 것입니다 ... –

답변

2

방법에 대해 :

if "XY" not in s: 
    print "matched" 
else 
    print "not matched" 

또는이 일부에 포함 이상 정규 표현식입니까? 그렇게 할 수있는 몇 가지 방법이 있습니다

+0

첫 줄에 'not'가 추가 된 것 같습니다. –

1

고정 오타 :

REGEXP="...(?!XY)..." 

편집 : 그럼 어쩌면 당신은 부정적 예측 식을합니다.

^(?!.*XY).*$ 

룩어 식의 아무 곳이나 문자열에 XY 순서와 일치하도록 시도합니다. 네거티브 lookahead이므로 찾으면 일치 시도가 실패합니다. 그렇지 않으면 .*이 진행되어 전체 문자열을 사용합니다.

^(?:(?!XY).)*$ 

이 하나 반복적 모든 문자 (.)과 일치하지만, 룩어 캐릭터가 XY 시퀀스의 시작 상태가 아닌 것을 확인한 후에.

^(?:[^X]+|X(?!Y))*$ 

는 반복 하나 X를 제외한 모든 문자의 이상, 또는이 Y 다음에 있지 않은 경우 X 일치합니다.

처음 두 개의 정규 표현식을 사용하면 원본 문자열의 개행 문자 인 경우 DOT_ALL 한정자를 적용해야합니다. 세 번째 문자는 도트 대신에 부정 문자 클래스 인 [^X]을 사용하기 때문에 필요하지 않습니다.