import re
text = "Hello, World!"
pattern = r"World"
match = re.search(pattern, text)
if match:
print("패턴과 일치하는 부분:", match.group())
else:
print("일치하는 부분이 없습니다.")
# 패턴과 일치하는 부분: Worldimport re
text = "Hello, World! Hello, Python!"
pattern = r"Hello"
matches = re.findall(pattern, text)
print("일치하는 부분 문자열:", matches)
# 일치하는 부분 문자열: ['Hello', 'Hello']import re
text = "Hello, World! Hello, Python!"
pattern = r"Hello"
replaced = re.sub(pattern, "Hi", text)
print("대체된 문자열:", replaced)
# 대체된 문자열: Hi, World! Hi, Python!특수 문자 | 설명 |
. | 줄바꿈 문자를 제외한 모든 문자와 매치 |
? | 앞의 문자가 0번 또는 1번 나타나는 패턴과 매치 |
* | 앞의 문자가 0번 이상 반복되는 패턴과 매치 |
+ | 앞의 문자가 1번 이상 반복되는 패턴과 매치 |
import re
text = "Hello, World!\nThis is a new line."
pattern = r"."
matches = re.findall(pattern, text)
print(matches) # 출력: ['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 'n', 'e', 'w', ' ', 'l', 'i', 'n', 'e', '.']import re
text = "a aa aaa abaa"
pattern = r"a?"
matches = re.findall(pattern, text)
print(matches) # 출력: ['a', '', 'a', 'a', '', 'a', 'a', 'a', '', 'a', '', 'a', 'a', '']import re
text = "a aa aaa abaa"
pattern = r"a*"
matches = re.findall(pattern, text)
print(matches) # 출력: ['a', '', 'aa', '', 'aaa', '', 'a', '', 'aa', '']import re
text = "a aa aaa abaa"
pattern = r"a+"
matches = re.findall(pattern, text)
print(matches) # 출력: ['a', 'aa', 'aaa', 'a', 'aa']특수 문자 | 설명 |
^ | 뒤의 문자열로 문자열이 시작됩니다. |
$ | 앞의 문자열로 문자열이 끝납니다. |
{숫자} | 숫자만큼 반복합니다. |
{숫자1, 숫자2} | 숫자1 이상 숫자2 이하만큼 반복합니다. ?, *, +를 이것으로 대체할 수 있습니다. |
{숫자,} | 숫자 이상만큼 반복합니다. |
import re
text = "Hello, World!"
pattern = r"^Hello"
match = re.search(pattern, text)
if match:
print("문자열이 'Hello'로 시작합니다.")
else:
print("문자열이 'Hello'로 시작하지 않습니다.")
#문자열이 'Hello'로 시작합니다.import re
text = "Hello, World!"
pattern = r"World!$"
match = re.search(pattern, text)
if match:
print("문자열이 'World!'로 끝납니다.")
else:
print("문자열이 'World!'로 끝나지 않습니다.")
# 문자열이 'World!'로 끝납니다.import re
text = "Hello, World!"
pattern = r"l{2}"
matches = re.findall(pattern, text)
print("'l'이 2번 반복되는 부분:", matches)
# 'l'이 2번 반복되는 부분: ['ll']import re
text = "Hello, World! Look at that cooing dove!"
pattern = r"o{1,2}"
matches = re.findall(pattern, text)
print("'o'가 1번 또는 2번 반복되는 부분:", matches)
# 'o'가 1번 또는 2번 반복되는 부분: ['o', 'o', 'oo', 'oo', 'o']import re
text = "Hello, World! Look at that cooing dove!"
pattern = r"o{1,}"
matches = re.findall(pattern, text)
print("'o'이 1번 이상 반복되는 부분:", matches)
# 'o'이 1번 이상 반복되는 부분: ['o', 'o', 'oo', 'oo', 'o']특수 문자 | 설명 |
[ ] | 대괄호 안의 문자들 중 한 개의 문자와 매치합니다. [amk]라고 한다면 a 또는 m 또는 k 중 하나라도 존재하면 매치를 의미합니다. [a-z]와 같이 범위를 지정할 수도 있습니다. [a-zA-Z]는 알파벳 전체를 의미하는 범위이며, 문자열에 알파벳이 존재하면 매치를 의미합니다. |
[^문자] | 해당 문자를 제외한 문자를 매치합니다 |
l | AlB와 같이 쓰이며 A 또는 B의 의미를 가집니다. |
\\ | 역 슬래쉬 문자 자체를 의미합니다 |
\d | 모든 숫자를 의미합니다. [0-9]와 의미가 동일합니다. |
\D | 숫자를 제외한 모든 문자를 의미합니다. [^0-9]와 의미가 동일합니다. |
\s | 공백을 의미합니다. [ \t\n\r\f\v]와 의미가 동일합니다. • space character 의 단축어 • 스페이스( ``) • 탭(t) • 라인 피드 또는 새 줄(n) • 캐리지 리턴(r) • 폼 피드(f) • 수직 탭(v) |
\S | 공백을 제외한 문자를 의미합니다. [^ \t\n\r\f\v]와 의미가 동일합니다. |
\w | 문자 또는 숫자를 의미합니다. [a-zA-Z0-9]와 의미가 동일합니다. • word character 의 단축어 |
\W | 문자 또는 숫자가 아닌 문자를 의미합니다. [^a-zA-Z0-9]와 의미가 동일합니다. |
import re
text = "Hello, World!"
pattern = r"[aeiou]"
matches = re.findall(pattern, text)
print("모음:", matches)# 출력: ['e', 'o', 'o']import re
text = "Hello, World!"
pattern = r"[^aeiou]"
matches = re.findall(pattern, text)
print("모음을 제외한 문자:", matches) # 출력: ['H', 'l', 'l', ',', ' ', 'W', 'r', 'l', 'd', '!']
import re
text = "Hello, World!"
pattern = r"Hello|World"
matches = re.findall(pattern, text)
print("'Hello' 또는 'World':", matches)# 출력: ['Hello', 'World']
import re
text = "Hello, \\World!"
pattern = r"\\"
matches = re.findall(pattern, text)
print("역슬래시 문자:", matches)# 출력: ['\\']
import re
text = "Hello, World! 123"
pattern = r"\d"
matches = re.findall(pattern, text)
print("숫자:", matches)# 출력: ['1', '2', '3']
import re
text = "Hello, World! 123"
pattern = r"\D"
matches = re.findall(pattern, text)
print("숫자가 아닌 문자:", matches) # 출력: ['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', ' ']import re
text = "Hello, World! \t123\n"
pattern = r"\s"
matches = re.findall(pattern, text)
print("공백 문자:", matches)# 출력: [' ', ' ', '\t', '\n']
import re
text = "Hello, World! \t123\n"
pattern = r"\S"
matches = re.findall(pattern, text)
print("공백이 아닌 문자:", matches)# 출력: ['H', 'e', 'l', 'l', 'o', ',', 'W', 'o', 'r', 'l', 'd', '!', '1', '2', '3']
import re
text = "Hello, World! 123"
pattern = r"\w"
matches = re.findall(pattern, text)
print("문자 또는 숫자:", matches)# 출력: ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd', '1', '2', '3']
import re
text = "Hello, World! 123"
pattern = r"\W"
matches = re.findall(pattern, text)
print("문자 또는 숫자가 아닌 문자:", matches)# 출력: [',', ' ', '!', ' ']

import re
def valid_email(email):
regex = r'^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$'
valid = re.search(regex, email)
if valid:
print("Valid email")
else:
print("Invalid email")
email = "mike@korea.co.kr"
valid_email(email) # 제대로 된 이메일
email = "mike@daum.net"
valid_email(email) # 제대로 된 이메일
email = "mike.j@korea.co.kr"
valid_email(email) # 제대로 된 이메일
email = "mysite.com"
valid_email(email) # 제대로 된 이메일이 아님
email = "mike@good"
valid_email(email) # 제대로 된 이메일이 아님
# Valid email
# Valid email
# Valid email
# Invalid email
# Invalid email
import re
def valid_url(url):
regex = r'^(https?):\/\/([^:\/\s]+)(:([^\/]*))?((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$'
valid = re.search(regex, url)
if valid:
print("Valid URL")
else:
print("Invalid URL")
url = "https://www.example.com"
valid_url(url) # 유효한 URL
url = "http://example.com/path/to/page"
valid_url(url) # 유효한 URL
url = "https://example.com/path/to/page?query=param#fragment"
valid_url(url) # 유효한 URL
url = "http://example.com:8080"
valid_url(url) # 유효한 URL (포트 번호 포함)
url = "http://example.com/path/to/page?query=param&invalid=char"
valid_url(url) # 유효한 URL
url = "http://example.com/path/to/page/index.html?query=param&invalid=char"
valid_url(url) # 유효한 URL
url = "ftp://example.com"
valid_url(url) # 유효하지 않은 URL (http 또는 https가 아님)
url = "http://example.com/path/to/page#invalid fragment"
valid_url(url) # 유효하지 않은 URL (프래그먼트에 유효하지 않은 문자 포함)
# Valid URL
# Valid URL
# Valid URL
# Valid URL
# Valid URL
# Invalid URL
# Invalid URLimport re
def preprocess_text(text):
# HTML 태그 제거
text = re.sub(r'<[^>]+>', '', text)
# 이메일 주소 추출
emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print("Extracted Emails:", emails)
# 웹 주소(URL) 추출
urls = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', text)
# [!*\\(\\),] ->
# (?:%[0-9a-fA-F][0-9a-fA-F]) : URL 인코딩 값 (예: %20)
print("Extracted URLs:", urls)
# 전화번호 형식 추출 (기본적인 형식)
phone_numbers = re.findall(r'\d{2,3}-\d{3,4}-\d{4}', text)
print("Extracted Phone Numbers:", phone_numbers)
# 공백 정리 (연속된 공백을 하나로)
text = re.sub(r'\s+', ' ', text)
# 한글만 추출
text = ''.join(re.findall(r'[\u3131-\u3163\uac00-\ud7a3]+', text))
return text
# 예제 텍스트에 적용
sample_text = """<html>이것은 예시 <b>텍스트</b>입니다! 여기에는 다양한 정보가 있습니다: 이메일 주소 john.doe@example.com, 웹사이트 http://example.com,
전화번호 010-1234-5678이 포함되어 있습니다.</html>"""
processed_text = preprocess_text(sample_text)
print("Processed Text:", processed_text)
# Extracted Emails: ['john.doe@example.com']
# Extracted URLs: ['http://example.com,']
# Extracted Phone Numbers: []
# Processed Text: 이것은예시텍스트입니다여기에는다양한정보가있습니다이메일주소웹사이트전화번호이포함되어있습니다