Python 정규 표현 식 - 전방 향 정의 부호

2416 단어
전방 향 경계 부 호 는 전방 향 긍정 경계 부 와 전항 부정 경계 부 호 를 포함 하 는데 다음 과 같다.
(?=...)
전방 향 긍정 정의 부.정규 표현 식 이 포함 되 어 있 으 면 현재 위치 가 성공 적 으로 일치 할 때 성공 하고 그렇지 않 으 면 실패 합 니 다.그러나 표현 식 이 시도 되 었 을 때 일치 하 는 엔진 이 전혀 향상 되 지 않 았 습 니 다.모드 의 나머지 부분 은 정의 문자 의 오른쪽 을 시도 해 야 합 니 다.
(?!...)
전방 부정 정의 부.긍정 적 인 정의 와 반대;함 유 된 표현 식 이 문자열 의 현재 위치 와 일치 하지 않 을 때 성공 합 니 다.
시범 을 통 해 어디 까지 성공 할 수 있 는 지 구체 적 으로 실현 하 는 데 도움 이 된다.파일 이름 과 일치 하 는 간단 한 모드 를 고려 하고 '..' 를 통 해 기본 이름과 확장자 두 부분 으로 나 눕 니 다.예 를 들 어 "news. rc" 에서 "news" 는 기본 이름 이 고 "rc" 는 파일 의 확장자 입 니 다.
일치 모드 는 매우 간단 합 니 다:
.*[.].*$

"." 는 메타 문자 이기 때문에 특별한 대우 가 필요 합 니 다.나 는 그것 을 문자 류 에 넣 었 다.그리고 뒤에 있 는 $주의 하기;이것 을 추가 하 는 것 은 문자열 의 나머지 부분 이 확장자 에 포함 되 어야 한 다 는 것 을 확보 하기 위해 서 입 니 다.이 정규 표현 식 은 "foo. bar", "autoexec. bat", "sendmail. cf", "printers. conf" 와 일치 합 니 다.
이제 문 제 를 복잡 하 게 만 드 는 것 을 고려 해 보 자.일치 하 는 확장자 가 "bat" 파일 이름 이 아니라면?잘못된 시도 들:
.*[.][^b].*$

위의 첫 번 째 "bat" 를 제거 하려 는 시 도 는 확장 자 를 요구 하 는 첫 번 째 문 자 는 "b" 가 아 닙 니 다.이것 은 잘못된 것 입 니 다. 이 모드 도 "foo. bar" 와 일치 하지 않 기 때 문 입 니 다.
.*[.]([^b]..|.[^a].|..[^t])$

첫 번 째 해결 방법 을 고 치 려 고 할 때 다음 과 같은 상황 과 일치 하 는 표현 식 을 요구 합 니 다. 확장자 의 첫 번 째 문 자 는 "b" 가 아 닙 니 다.두 번 째 문 자 는 "a" 가 아 닙 니 다.또는 세 번 째 문 자 는 't' 가 아 닙 니 다.이렇게 하면 'foo. bar' 를 받 아들 여 'autoexec. bat' 를 거절 할 수 있 지만, 이 요 구 는 'sendmail. cf' 와 같은 두 글자 의 확장 자 를 받 아들 이지 않 고 세 글자 의 확장자 만 받 아들 일 수 있 습 니 다.우 리 는 그것 을 고 치 려 고 노력 할 때 다시 이 모델 을 복잡 하 게 만 들 것 이다.
.*[.]([^b].?.?|.[^a]?.?|..?[^t]?)$

세 번 째 시도 에서 두 번 째 와 세 번 째 자 모 는 모두 선택 할 수 있 습 니 다. 세 글자 보다 더 짧 은 확장 자 를 허용 하기 위해 서 입 니 다. 예 를 들 어 "sendmail. cf" 와 같 습 니 다.
이 모델 은 지금 매우 복잡 해 져 서 읽 기 가 매우 어렵다.더 나 쁜 것 은 문제 가 바 뀌 면 확장 자 는 'bat' 과 'exe' 가 아니 라 더 복잡 하고 혼 란 스 러 워 질 수도 있다 는 것 이다.
전방 부정 으로 이 모든 것 을 재단 합 니 다.
.*[.](?!bat$).*$

전방 향 의 뜻: 표현 식 bat 가 여기에 일치 하지 않 으 면 시도 모드 의 나머지 부분;bat $가 일치 하면 전체 모드 가 실 패 됩 니 다.뒤의 $는 "Sample. batch" 와 같은 확장 자 를 확보 하기 위해 "bat" 로 시작 하 는 것 이 허용 되 는 것 입 니 다.
다른 파일 확장 자 를 제외 하 는 것 도 쉽 습 니 다.간단하게 옵션 으로 정의 문자 에 넣 습 니 다.아래 의 이 모드 는 "bat" 또는 "exe" 로 끝 나 는 파일 이름 을 제외 합 니 다.
.*[.](?!bat$|exe$).*$

좋은 웹페이지 즐겨찾기