⊗pyPmREGL 38 of 129 menu

파이썬 정규 표현식의 탐욕 제한

정규 표현식은 기본적으로 탐욕적(greedy)입니다. 이것은 가능한 한 많은 문자를 포획한다는 것을 의미합니다. 예제를 통해 알아보겠습니다. 다음과 같은 문자열이 있다고 가정해 봅시다:

txt = 'aeeex zzz x kkk'

이 문자열에서 다음 패턴을 사용하여 부분 문자열 'aeeex'를 찾고자 합니다: 문자 'a', 그 다음 임의의 문자 하나 이상, 그 다음 문자 'x':

res = re.sub('a.+x', '!', txt) print(res)

'! zzz x kkk' 문자열을 얻어야 하지만, '! kkk' 문자열이 출력됩니다. 문제는 정규식이 문자 'a'부터 문자 'x'까지 모든 문자를 찾기 때문입니다. 하지만 우리 문자열에는 두 개의 'x' 문자가 있습니다! 탐욕성 때문에 정규식은 마지막 x까지 찾게 되어, 우리가 원했던 것과 다른 것을 포착하게 됩니다.

물론, 종종 이런 동작이 우리에게 필요한 경우도 있습니다. 하지만 이 특정한 경우에는 탐욕을 취소하고 정규식에게 첫 번째 x까지만 찾도록 지시해야 합니다. 이 경우 반복 연산자 뒤에 물음표를 붙이면 됩니다:

res = re.sub('a.+?x', '!', txt) print(res) # '! zzz x kkk' 문자열 출력

탐욕은 모든 반복 연산자에 제한할 수 있습니다: *, ?, {} - 이렇게요: *?, ?? 그리고 {}?.

다음 문자열이 주어졌습니다:

txt = 'aba accca azzza wwwwa'

양쪽 끝에 문자 'a'가 있는 모든 문자열을 찾고, 각각을 '!'로 대체하는 정규식을 작성하세요. 문자 'a' 사이에는 ('a'를 제외한) 임의의 문자가 있을 수 있습니다.

한국어
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
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부