import re
p = re.compile('ab*')
함수 | 설명 |
match() | 문자열의 처음 시작부터 검색하여 일치하지 않는 부분이 나올 때까지 찾는다. |
search() | 문자열 전체를 검색하여 처음으로 매치되는 문자열을 찾는다. |
findall() | 정규식과 매치되는 모든 문자열을 찾아 리스트로 반환한다. |
finditer() | 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 반환한다. |
# 컴파일과 매치의 동시 수행
m = re.match('[a-z]+', 'python')
함수 | 설명 |
group() | 매치된 문자열을 반환한다. |
start() | 매치된 문자열의 시작 위치를 반환한다. |
end() | 매치된 문자열의 끝 위치를 반환한다. |
span() | 매치된 문자열의 시작과 끝 값을 튜플로 반환한다. |
옵션 | 약어 | 설명 |
DOTALL | S | dot(.) 메타 문자가 줄바꿈 문자(‘\n’)를 포함하여 모든 문자와 일치한다. |
IGNORECASE | I | 대소문자에 관계 없이 일치한다. |
MULTILINE | M | 여러 줄의 문자열에 대해 ^, $ 메타문자를 적용할 수 있다. ※ ^는 문자열의 처음을, $는 문자열의 마지막을 의미 |
VERBOSE | X | 정규식을 보기 편하게 만들고 주석 등을 사용할 수 있게 한다. |
[가정] “\section” 문자열을 찾기 위한 정규식을 만들어야 하는 상황 | |
re.compile(“\section”) | 이 정규식은 \s 문자가 공백으로 해석되어 의도한 대로 매치가 이뤄지지 않음 왼쪽의 정규식은 [ \t\n\r\f\v]ection 과 같은 의미로 해석 됨 결국 정규식에서 사용한 \ 문자가 문자열 자체임을 알려 주기 위해 \를 2개 사용하여 이스케이프 처리를 해야 한다. >>> re.compile(“\\section”) 하지만 파이썬 정규식 엔진에는 파이썬 문자열 리터럴 규칙에 따라 \\이 \로 변경되어 결국 \section이 전달된다. 결국 파이썬 정규식 엔진에 \\ 문자를 전달하기 위해서는 백슬래시 4개 \\\\를 사용해야 한다. |
이러한 문제로 인해 파이썬 정규식에는 Raw String 규칙이 생기게 됐다.
따라서 다음과 같이 정규식 문자열 앞에 r 문자를 삽입하면 Raw String 규칙에 의해 \를 1개만 써도 동일한 의미를 갖게 된다. >>> re.compile(r”\\section”)
메타 문자 | 설명 |
| | or의 의미 |
^ | 문자열의 처음과 일치함을 의미 |
$ | 문자열의 끝과 일치함을 의미 |
\A | 문자열의 처음과 일치함을 의미. ^은 MULTILINE 옵션을 사용할 경우 각 줄의 문자열의 처음과 매치되지만 \A는 줄과 상관 없이 전체 문자열의 처음 하고만 일치 된다. |
\Z | 문자열의 끝과 일치함을 의미. 여러 줄로 작성된 문자열에서 줄과 상관 없이 전체 문자열의 끝과 일치된다. |
\b | 단어 경계를 나타낸다. 단어 경계는 단어 문자와 비단어 문자 사이의 위치를 의미한다. 여기서 단어 문자는 보통 알파벳, 숫자, 밑줄 문자를 포함하며, 비단어 문자는 그 외의 문자이다. \b는 백스페이스를 의미하므로 단어 구분자로 사용되기 위해서는 Raw string임을 알려주는 r을 반드시 붙여줘야 한다. |
\B | \b와 반대로 단어 앞뒤가 공백으로 구분된 단어가 아닌 경우에만 일치된다. |
group(인덱스) | 설명 |
group(0) | 일치된 전체 문자열, group()와 동일 |
group(1) | 첫 번째 그룹에 해당하는 문자열 |
group(n) | n 번째 그룹에 해당하는 문자열 |
정규식 | 종류 | 설명 |
표현식1(?=표현식2) | 긍정 전방 탐색 | 표현식1 뒤의 문자열이 표현식2와 매치되면 표현식1 일치. 표현식2의 문자열은 결과로 반환하지 않는다. |
표현식1(?!표현식2) | 부정 전방 탐색 | 표현식1 뒤의 문자열이 표현식2와 매치되지 않으면 표현식1 일치. 표현식2의 문자열은 결과로 반환하지 않는다. |
정규식 | 종류 | 설명 |
(?<=표현식2) 표현식1 | 긍정 후방 탐색 | 표현식1 앞의 문자열이 표현식2와 매치되면 표현식1 일치. 표현식2의 문자열은 결과로 반환하지 않는다. |
(?<!표현식2) 표현식1 | 부정 전방 탐색 | 표현식1 앞의 문자열이 표현식2와 매치되지 않으면 표현식1 일치. 표현식2의 문자열은 결과로 반환하지 않는다. |
# Pattern 객체.sub(바꿀 문자열, 대상 문자열, 바꿀 횟수)
p = re.compile('(blue|white|red)')
p.sub('colour' , 'blue socks and red shoes', count=1)
11. BeautifulSoup 모듈 (0) | 2023.10.31 |
---|---|
09. 정규 표현식 - 2 (0) | 2023.10.27 |
08. 정규 표현식 - 1 (0) | 2023.10.26 |
댓글 영역