ProgramingTip

"아무것도 일치하지 않음"에 대한 정규식 구문?

bestdevel 2020. 11. 10. 22:05
반응형

"아무것도 일치하지 않음"에 대한 정규식 구문?


regexp를 많이 사용하는 기능 템플릿 엔진이 있습니다. 다음과 같은 연결을 사용합니다.

re.compile( regexp1 + "|" + regexp2 + "*|" + regexp3 + "+" )

단일 하위 계층 (regexp1, regexp2 등)을 가질 수 있습니다.

일치하지 않는 템플릿 내에서 사용할 수있는 아무것도 일치하지 않는 작고 가벼운 표현이 있습니까? 안타깝게도 가끔 '+'또는 '*'가 regexp 원자에 추가되어 빈 곳을 사용할 수 없습니다.이 경우 "반복 할 항목 없음"오류가 발생합니다.


이것은 아무것도 일치하지 않습니다.

re.compile('$^')

따라서 regexp1, regexp2 및 regexp3을 '$ ^'로 바꾸면 일치하는 항목을 수 없습니다. 다중 회선 모드를 사용하지 않는 한.


몇 가지 테스트 후 더 나은 해결책을 찾았습니다.

re.compile('a^')

일치하는 것은 불가능하며 이전 솔루션보다 일찍 실패합니다. a를 다른 문자로 바꿀 수있는 것은 항상 불가능합니다.


(?!)항상 일치하지 않습니다. 너비가 0 인 네거티브 미리보기입니다. 괄호 안의 내용이 일치하면 전체 일치가 실패합니다. 그 안에 아무것도 없다는 점을 감안할 때 아무것도 포함하지 않습니다.


여러 줄 모드에서 사용할 수 있습니다 \A\Z.

re.compile('\A\Z|\A\Z*|\A\Z+')

차이점은 \A\Z문자열의 시작과 끝 이지만 ^, $이들은 줄의 시작 /과 끝 $^|$^*|$^+일치 여부 할 수 있으므로 바꿈을 포함하는 문자열과 잠재적으로 일치 여부 할 수 있습니다 (플래그가 활성화 된 경우).

그리고 아무것도 일치하지 않는 경우 (빈 많은 것),보다 많은 것들이 시작되기 전에. 예 :

re.compile('.\A|.\A*|.\A+')

\ A (정의상)는 어떤 문자도 올 수 있는지 항상 일치하지 않습니다.


어쩌면 '.{0}'?


당신이 사용할 수있는
\z..
이 아무것도 두 다음, 당신의 절대 끝

+또는 *끝에 고정되어 있으면 여전히 작동합니다.


또는 목록 이해력을 사용하여 쓸모없는 정규화 된 항목을 제거하고 결합하여 모두 합치십시오. 다음과 같은 것 :

re.compile('|'.join([x for x in [regexp1, regexp2, ...] if x != None]))

그래도 코드 줄 옆에 주석을 추가하십시오 :-)

참고 URL : https://stackoverflow.com/questions/940822/regular-expression-syntax-for-match-nothing

반응형