regular expression은 문자열의 패턴을 잡아내어 추출하는 데 사용됩니다. 예를 들어 문자열 중 숫자만 뽑아 온다든가 알파벳만 뽑아온다든가 아니면 'student'를 포함하고 있는 문자열만 추출한다든지 하는 방식으로 활용할 수 있습니다.
메타 문자 | 설명 | 예시 |
---|---|---|
. | 임의의 한 문자(줄바꿈 제외) | a.b 는 a+b , a_b 와 매칭 |
^ | 문자열의 시작 | ^abc 는 abc 로 시작하는 문자열과 매칭 |
$ | 문자열의 끝 | abc$ 는 abc 로 끝나는 문자열과 매칭 |
* | 바로 앞 문자가 0번 이상 반복 | a* 는 a 가 0번 이상 나타나는 경우와 매칭 |
+ | 바로 앞 문자가 1번 이상 반복 | a+ 는 a 가 1번 이상 나타나는 경우와 매칭 |
? | 바로 앞 문자가 0번 또는 1번 나타남 | a? 는 a 가 0번 또는 1번 나타나는 경우와 매칭 |
[] | 문자 클래스. 내부의 문자 중 하나와 매칭 | [abc] 는 a , b , c 중 하나와 매칭 |
| | OR 연산자. 둘 중 하나와 매칭 | a|b 는 a 또는 b 와 매칭 |
() | 그룹화. 괄호 안의 패턴을 그룹으로 처리 | (abc) 는 abc 와 매칭 |
\d | 숫자와 매칭(0-9) | \d 는 숫자와 매칭 |
\w | 알파벳, 숫자, 밑줄과 매칭 | \w 는 [a-zA-Z0-9_] 와 매칭 |
\s | 공백 문자와 매칭(스페이스, 탭, 줄바꿈) | \s 는 공백 문자와 매칭 |
\b | 단어 경계 | \bword\b 는 단어 word 와 매칭 |
1) re.search()
result = re.search(r'abc', 'xyzabcdef')
print(result.group()) # 출력: 'abc'
2) re.sub()
result = re.sub(r'\d+', '#', 'My number is 1234')
print(result) # 출력: 'My number is #'
예를 들어,
이메일 주소를 추출하고 싶다면
email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
emails = re.findall(email_pattern, 'Contact: test@example.com, admin@domain.co.kr')
print(emails) # 출력: ['test@example.com', 'admin@domain.co.kr']
전화번호를 추출하고 싶다면
phone_pattern = r'\d{3}-\d{3,4}-\d{4}'
phones = re.findall(phone_pattern, 'Call me at 123-456-7890 or 987-6543-2100')
print(phones) # 출력: ['123-456-7890', '987-6543-2100']
와 같이 쓰는 식입니다. 사실 저도 정규표현식이 워낙 다양하고 기능이 많아서 다 기억하고 있지는 않습니다. 다만, 정규표현식을 썼을 때 어떤식으로 실제 추출하는지는 여러 웹페이지에서 확인하는 것이 가능한데요. 대표적으로 아래와 같은 사이트에서 확인해 볼 수 있습니다.
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
'프로그래밍 > Python 관련 정보' 카테고리의 다른 글
[Pythonic Programming] Context manager (0) | 2024.10.26 |
---|---|
[Pythonic Programming] SOLID원칙 (1) | 2024.10.25 |
[Python Programming 기초] Eval/Exec함수 (0) | 2024.10.25 |
[Python Programming 기초] Formatted string (2) | 2024.10.24 |
[Python Programming 기초] 부분 unpacking (1) | 2024.10.22 |