import re
# 문자열에서 'abc' 찾기
text = "abcdef"
pattern = r'abc'
match = re.search(pattern, text)
if match:
print("문자열 'abc'를 찾았습니다.") # 출력: 문자열 'abc'를 찾았습니다.
주요 메타문자
- . : 줄바꿈 문자를 제외한 모든 문자와 일치합니다.
- ^ : 문자열의 시작 부분에 대응됩니다.
- $ : 문자열의 끝 부분에 대응됩니다.
- : 앞의 문자가 0회 이상 반복되는 부분에 매치됩니다.
- : 앞의 문자가 1회 이상 반복되는 부분에 매치됩니다.
- ? : 앞의 문자가 0회 또는 1회 등장하는 부분에 사용합니다.
- {m, n} : 앞의 문자가 최소 m회, 최대 n회 반복되는 부분에 사용합니다.
- [] : 대괄호 안에 문자들 중 하나와 일치하는 부분에 대응됩니다.
- () : 괄호 안의 패턴을 그룹으로 묶어줍니다. 그룹은 결과를 추출하거나, 앞의 메타 문자들과 조합하여 사용할 수 있습니다.
- | : OR연산자로, 두 패턴 중 하나와 일치하는 부분에 대응된다.
- \ : 이스케이프 문자로, 메타 문자를 일반 문자로 취급하게 합니다.
- \d : 모든 숫자와 일치합니다.
- \D : 숫자가 아닌 모든 문자와 일치합니다.
- \w : 문자, 숫자, 밑줄(_)과 일치합니다.
- \W : 문자, 숫자, 밑줄(_)이 아닌 문자와 일치합니다.
- \s : 모든 공백 문자와 일치합니다.
- \S : 공백 문자가 아닌 모든 문자와 일치합니다.
- \b : 단어의 경계를 나타냅니다. 단어 문자와 비단어 문자 사이의 경계를 찾는데 사용됩니다.
- \B : 단어의 경계가 아닌 부분에 대응됩니다.
- \A : 문자열의 시작 부분에 대응됩니다. ^와 비슷하지만, multi line에서 차이가 있습니다.
- \Z : 문자열의 끝 부분에 대응됩니다. $와 비슷하지만, multi line에서 차이가 있습니다.
^와 \A의 의미는 비슷하지만 multi line에서 다소 차이점이 있다. 둘다 문자열의 시작을 의미하지만, multi line에서 ^는 각 줄의 시작에도 매칭되지만 \A는 전체 문자열의 시작에서만 매칭됩니다. ($와 \Z 역시 동일하다.)
import re
text = """hello world
hello again"""
# ^로 시작 부분 찾기
pattern 1 = r^'hello'
print(re.findall(pattern1, text, re.MULTILINE)) # ['hello', 'hello']
# \A로 문자열 전체의 시작 부분 찾기
pattern2 = r'\Ahello'
print(re.findall(pattern2, text, re.MULTILINE)) # ['hello']
파이썬에서 Regular Expression을 다루려면, re 라이브러리를 사용해야한다.
- compile(pattern, flags=0) : 컴파일된 정규 표현식 객체로 만들어 사용하는 방법입니다. 이렇게 컴파일된 객체는 재사용이 가능하고, 다양한 정규 표현식 메서드를 더 효율적으로 호출할 수 있게 해줍니다.
- search : 문자열에서 정규식과 일치하는 첫번째 부분을 찾습니다. 일치하는 항목이 없으면 None을 return.
- match : 문자열의 시작 부분에서 패턴과 일치하는 부분을 찾습니다. 일치하는 항목이 없으면 None을 return.
- sub(pattern, repl, string, count = 0) : string에서 pattern과 일치하는 부분을 replace 텍스트로 교체, count 매개변수를 사용하여 교체 횟수를 제한할 수 있습니다.
- split(pattern, string, maxsplit = 0) : pattern을 기준으로 string을 분리하고, 분리된 문자열 리스트를 반환합니다. maxsplit 매개변수를 사용하여 분할 횟수를 제한할 수 있습니다.
- findall : 문자열에서 정규 표현식과 일치하는 모든 부분을 찾고, 리스트로 반환합니다.
- finditer : 문자열에서 정규 표현식과 일치하는 모든 부분을 찾고, 반복 가능한 객체 (iterator)로 반환합니다.