Python | 정규표현식 문법
포스트
취소

Python | 정규표현식 문법

pyhton의 regex를 기준으로 작성되었다

메타문자

문자설명
.모든 문자열 매치
\|or 처럼 사용됨
^파일의 처음과 매치
$파일의 끝과 매치
\A파일의 처음과 매치 (MULTILINE)
\Z파일의 끝과 매치 (MULTILINE)
\b단어구분자 (whitespace)
\B\b의 부정

반복

문자설명
*0~번 반복
+1~번 반복
{m,n}m~n 번 반복
?0~1번 반복

문자 클래스

문자설명
[...]문자클래스 매치
\d[0-9] 와 동일
\s[ \t\n\r\f\v] 와 동일
\w[a-zA-Z0-9_] 와 동일
[^...][...] 의 부정
\D\d 의 부정
\S\s 의 부정
\W\W 의 부정

Grouping

문자설명
()그루핑 문자열
1
2
3
4
5
6
c = re.compile(r"(hello)\b(world)")
m = p.match("hello world")

g0 = m.group(0) # 'hello world'
g1 = m.group(1) # 'hello'
g2 = m.group(2) # 'world'

그루핑 문자열 재참조

문자설명
\1첫번째 그룹 재참조
\숫자n번째 그룹 재참조
(?P<이름>)Named Group
(?P=이름)Named Group 재참조

매치된 동일한 문자열에 대한 매치

1
2
3
c = re.compile(r"(?P<Numbers>\d+) (?P=Numbers)+")
m1 = c.match("100 100") # 매치됨
m2 = c.match("100 200") # 매치되지 않음

전방 탐색

문자설명
(?=...)긍정형 전방 탐색
(?!...)부정형 전방 탐색

문자열을 소비하지 않고 탐색

1
2
3
4
5
6
c = re.compile(r".*[.](?!bat$|msi$).*$")

c.match("readme.txt") # 매치됨
c.match("hello.exe") # 매치됨
c.match("run.bat") # 매치되지 않음
c.match("setup.msi") # 매치되지 않음

문자열 변환

1
2
3
4
5
6
7
p = re.compile('(red|green|blue)')

p.sub('color', 'red and blue')
# 'color and color'

p.sub('color', 'red and blue', count=1)
# 'color and blue'

참조 구문 사용

1
2
3
p = re.compile(r'([a-zA-z]+):([a-zA-z]+)')
p.sub(r"\g<1> and \g<2>", "Daegu:Seoul")
# Daegu and Seoul

\g<name> 등 named group도 사용가능

함수 넣기

1
2
3
4
5
6
7
def filter(match):
    value = int(match.group())
    return hex(value)

p = re.compile(r'\d+')
p.sub(filter, 'result: 100208')
# result: 0x18770

Non-Greedy

non-greedy 문자 ?

*?, +?, ??, {m,n}? 등으로 사용가능

1
2
3
4
5
6
7
8
s = '<html><head></head></html>'
greedy = re.compile('<.*>')
non_greedy = re.compile('<.*?>')

greedy.match(s)
# '<html><head></head></html>' 매치
non_greedy.match(s)
# '<html>' 매치
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
바로가기