⊗pyPmRELAB 72 of 129 menu

파이썬 정규식의 긍정 및 부정 전후방탐색

때로는 다음과 같은 유형의 문제를 해결해야 할 때가 있습니다: 문자열 'aaa'를 찾아 '!'로 바꾸되, 'aaa' 바로 뒤에 'x'가 있을 때만, 그리고 'x' 자체는 바꾸지 않는 경우입니다. 만약 우리가 이 문제를 '단순하게' 해결하려고 시도한다면, 성공하지 못할 것입니다:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # '! baaa'를 출력하지만, 우리는 '!x baaa'를 원했습니다

전방탐색

이 문제를 해결하려면, 'x'는 바꾸지 않아야 한다고 말할 수 있는 방법이 필요합니다. 이는 특별한 괄호 (?= )를 사용하여 수행됩니다. 이 괄호는 단순히 확인만 할 뿐, 소비하지는 않습니다.

이 괄호를 긍정 전방탐색이라고 합니다. 긍정적인 이유는 'x'가 (우리의 경우) 있어야만 — 그때만 치환이 일어나기 때문입니다.

이 괄호를 사용하여 우리의 문제를 해결해 봅시다:

txt = 'aaax baaa' res = re.sub('aaa(?=x)', '!', txt) print(res) # '!x baaa'를 출력합니다

부정 전방탐색도 있습니다 - (?! ) - 이것은 반대로, 무엇인가가 없어야 한다고 말합니다. 다음 예에서, 치환은 'aaa' 뒤에 'x'가 있지 않을 때만 일어납니다:

txt = 'aaax aaab' res = re.sub('aaa(?!x)', '!', txt) print(res) # 'aaax !b'를 출력합니다

후방탐색

유사하게 긍정 후방탐색이 있습니다 - (?<= ). 다음 예에서 치환은 'aaa' 앞에 'x'가 있을 때만 일어납니다:

txt = 'xaaa' res = re.sub('(?<=x)aaa', '!', txt) print(res) # 'x!'를 출력합니다

그리고 부정 후방탐색도 있습니다 - (?<! ). 다음 예에서 치환은 'aaa' 앞에 'x'가 없을 때만 일어납니다:

txt = 'baaa' res = re.sub('(?<!x)aaa', '!', txt) print(res) # 'b!'를 출력합니다

실습 문제

함수 이름을 포함하는 문자열이 주어졌습니다:

txt = 'func1() func2() func3()'

문자열에서 함수 이름의 배열을 얻으세요.

태그가 있는 문자열이 주어졌습니다:

txt = '<a href="" class="eee" id="zzz">'

이 태그의 속성 이름 배열을 얻으세요.

변수가 있는 문자열이 주어졌습니다:

txt = '$aaa $bbb $ccc xxxx'

달러 기호가 앞에 있는 부분 문자열을 얻으세요.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부