반응형
※스폰서 링크
파이썬을 사용해서 같은 문자가 여러 번 반복되는 것을 패턴으로 표현하고 싶은 경우 '*'와 '+'를 사용할 수 있습니다.
*로 반복되는 문자 표현하기
import re
regex = re.compile('a')
#compile을 이용해서 'a'라는 정규표현식 패턴을 만들었습니다.
print(regex.match('aaaaa'))
#match메소드를 이용해서 앞부분의 문자가 일치하는지 확인하고 있습니다.
#출력 결과 ⇨ <re.Match object; span=(0, 1), match='a'>
만약 여기서 a가 백 번 반복하는 패턴을 표현하고 싶으면 100개를 다 적어야 할까요? 물론 효율을 추구해야 하는 컴퓨터 언어에서 그럴 리는 없겠죠. 여기서 *를 사용할 수 있습니다.
import re
regex = re.compile('a*')
#compile을 이용해서 'a*'라는 정규표현식 패턴을 만들었습니다.
print(regex.match('aaaaa'))
#출력 결과⇨ <re.Match object; span=(0, 11), match='aaaaaaaaaaa'>
print(regex.match('aaaaaaaaaaabaaaaaaaaaaaa'))
#출력 결과⇨ <re.Match object; span=(0, 11), match='aaaaaaaaaaa'>
#앞 부분이 일치하는 것을 확인하기 때문에
#b이전의 a를 패턴과 일치하는 것으로 확인하고 있습니다.
print(regex.match(''))
#출력결과⇨ <re.Match object; span=(0, 0), match=''>
문자가 없는 경우에도 매치 객체를 반환하고 있습니다.
#즉 a*라고 했을 때 최소는 0이고 최대는 무한대라는 것을 알 수 있습니다.
[ ]와 -를 *와 함께 사용하면 정규표현식에 포함되는 문자의 폭을 훨씬 늘릴 수 있습니다.
※[]는 안에 들어 있는 모든 문자 중 하나 이상이라는 의미가 됩니다.
※-를 사용하면 순서를 가진 문자를 시작 부터 끝까지 모두를 표현하는 것이 됩니다.
예: 0-9(0부터 9사이의 모든 숫자)
import re
regex = re.compile('[a-z]*')
#compile을 이용해서 '[a-z]*'라는 정규표현식 패턴을 만들었습니다.
print(regex.match('aaabbbccczzz'))
#출력 결과⇨ <re.Match object; span=(0, 12), match='aaabbbccczzz'>
print(regex.match('zyxbca'))
#출력 결과⇨ <re.Match object; span=(0, 6), match='zyxbca'>
print(regex.match(''))
#출력 결과⇨ <re.Match object; span=(0, 0), match=''>
위의 출력 결과를 보면 어떤 알파벳 소문자이든 [a-z]*라는 패턴에 매치한다는 것을 알 수 있습니다. 잊지 말아야 할 것은 ''처럼 문자가 하나도 없는 경우에도 최소가 0이기 때문에 매치 객체를 반환해 준다는 것입니다.
+로 반복되는 문자 표현하기
*와 +의 가장 큰 차이는 포함되는 최소수가 다르다는 것입니다. 따라서 다른 예제들은 모두 같은 결과를 반환하지만 마지막에 문자가 없는 경우에는 None을 반환하고 있다는 것을 알 수 있습니다.
import re
regex = re.compile('[a-z]+')
#compile을 이용해서 '[a-z]'라는 정규표현식 패턴을 만들었습니다.
print(regex.match('aaabbbccczzz'))
#출력 결과⇨ <re.Match object; span=(0, 12), match='aaabbbccczzz'>
print(regex.match('zyxbca'))
#출력 결과⇨ <re.Match object; span=(0, 6), match='zyxbca'>
print(regex.match(''))
#출력 결과⇨ None
반응형