"아무것도 일치하지 않음"에 대한 정규식 구문?
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
'ProgramingTip' 카테고리의 다른 글
FCM 알림에서 주제를 만드는 방법 (0) | 2020.11.10 |
---|---|
ostream을 사용하여 C ++에서 서명되지 않은 문자를 16 진수로 어떻게 인쇄합니까? (0) | 2020.11.10 |
디렉토리가 아닌 파일에 대한 chmod 변경 (0) | 2020.11.10 |
iPhone 및 WireShark (0) | 2020.11.10 |
std :: string으로 조건부 중단 점을 만드는 방법 (0) | 2020.11.10 |