1. Regular Expression
String
- Character: 'a', 'b', 'c'와 같이 글자 하나하나를 의미
- String: 문자들이 여러 개 모여 있는 것을 의미
파이썬에서는 따옴표(작은, 큰)로 둘러싸여 있는 것을 의미한다.
1.1 Regular Expression
- Regular Expression, regex, rational expression, regexp, etc.,
- 아주 간단하게 표현하자면 특정한 문자열의 규칙을 찾고(1) 가공(2)하는 방법
- 긴 문자열에서 특정 규칙을 가진 문자열을 찾거나, 어떤 패턴을 가진 문구를 찾는 데 유용
1. re.match()
- 어떤 string의 시작점에서 pattern 찾기
- match는 해당 문자열의 가장 처음부터 원하는 패턴의 문자열을 찾는 명령
- 패턴은 간단히 문자열로 정의
- 패턴 문자열을 re.compile()에 전달해 패턴 객체를 생성해두기도 함.
- 정의한 문자열 또는 패턴 객체는 re.match(), re.search() 등 다른 함수의 패턴 인수로 전달할 때 사용
- 대소문자 구분
- 시작부터 매칭되었는지 찾는 함수이기 때문에 텍스트 중간에 있는 패턴은 찾지 못함
- match되면 객체 반환, 그렇지 않으면 None 반환
- 정규 표현식에는 match를 찾는 것(re.match()나 re.search())과 반환하는 것(group(), groups())은 별개의 과정
2. re.search()
- 사용 방법은 match와 같음
- match와 다르게 문장 중간에 있는 pattern 찾기 가능
match는 처음부터 패턴이 동일할 때만 그 값을 찾을 수 있는 반면, search는 중간에 패턴이 있어도 찾아낼 수 있다.
re.match(), re.search(), (+re.fullmatch())
- 세 함수는 하는 일이 비슷함
- 문자열에서 패턴이 match시킬 위치를 제약하는 정도에만 차이 존재
- re.match(): 문자열 시작점에서만 패턴 매치
- re.search(): 문자열 어느 위치에서나 패턴 매치
- re.fullmatch(): 문자열의 시작부터 끝까지 전체 매치만 가능.
1.2 Escape Character
.
- .은 한 개의 임의의 문자
- 정규 표현식이 "a.c"라면 a와 c 사이에 임의의 1개의 문자 올 수 있음
?
- ?는 바로 앞의 문자가 존재할 수도 있고, 존재하지 않을 수도 있음
- 있다고 판단할 수도, 없다고 판단할 수도 있다.
*
- *는 바로 앞의 문자가 0개 이상일 경우 의미
- 바로 앞의 문자가 여러개 존재할 수도 있고, 존재하지 않을 수도
- 정규 표현식이 a*bc인 경우 매치할 수 있는 경우는 abc, aabc, aaabc 등 a의 개수가 아주 많아도 됨
+
- +는 *와 유사
- 차이점은 앞의 문자가 최소 1개 이상이어야 함
{m}
- 문자 뒤에 {m} 기호를 붙이면 해당 문자를 숫자 {m}만큼 반복한 것을 의미
- ab{2}c는 a와 c 사이에 b가 2번 등장하는 문자열에 대해서 match
{m, n}
- 문자 뒤에 {m, n} 기호를 붙이면 해당 문자를 숫자1(m) 이상 숫자2(n) 이하만큼 반복한 것을 의미
- 정규 표현식이 ab{2, 8}c라면 a와 c 사이에 b가 2개 이상 8개 이하로 등장한 문자열에 대해서 match
{m,}
- 문자 뒤에 {m,} 기호를 붙이면 해당 문자를 숫자(m) 이상 만큼 반복
- 정규 표현식이 a{2,}bc라면 뒤에 bc가 붙으면서 a의 갯수가 2개 이상인 경우인 문자열과 match
- {0,}을 쓴다면? *와 동일한 의미
- {1,}을 쓴다면? +와 동일한 의미
[]
- [] 안에 문자들을 넣으면 그 문자들 중 한 개의 문자와 match
- 정규 표현식이 [abc]라면, a 또는 b 또는 c가 들어가있는 문자열과 match
- 범위 지정 가능
- [a-zA-Z]는 알파벳 전부를 의미, [0-9]는 숫자 전부를 의미
- 알파벳 소문자에 대해서만 범위 지정하여 정규 표현식을 만들어보고 문자열과 match하면?
[^]
- ^기호 뒤에 붙은 문자들을 제외한 모든 문자 match
- [^abc]라는 정규 표현식이 있다면, a 또는 b 또는 c가 들어간 문자열을 제외한 모든 문자열 match
