-
- 문자 클래스 [ ] : [ ] 사이의 문자들과 매치
- [a-zA-Z] : 알파벳 모두
- [0-9] : 숫자
- \\d - [0-9]와 동일
- \\D - 숫자가 아닌 것, [^0-9]와 동일
- \\s - whitespace 문자와 매치
- \\S - whitespace 문자가 아닌 것과 매치
- \\w - 문자+숫자 [a-zA-Z0-9_]와 동일
- \\W - 문자+숫자(alphanumeric)가 아닌 문자, [^a-zA-Z0-9_]와 동일. 특수문자 축약
- Dot(.) : 줄바꿈 문자인 \\n 을 제외한 모든 문자와 매치, 자리를 맡아둠 (re.DOTALL 옵션을 주면 \\n 문자와도 매치된다.)
- $ : end$ ⇒ end로 끝나는 문자열과 매칭
- | : a(b**|**c) ⇒ a 그리고 b 또는 c 를 포함한 문자열과 매칭 ( a[bc] 와 같음)
- Caret(^) : 문자열의 제일 앞 부분과 일치함을 의미. ⇒ “[^ ]”과는 다르니 주의한다.
- 반복
- () :** 바로 앞에 있는 문자가 0부터 무한대로 반복
- a**(bc)* :** a 그리고 0개 이상의 bc 를 포함한 문자열과 매칭
- (+) : +는 최소 1번 이상 반복될 때
- {m, n} : ca{2,5}t ⇒ "c + a(2~5회 반복) + t”, [a]{2,}이면 a가 2개 이상인거 [a]{2, 4}이면 aa, aaa, aaaa 이다.
- ? : ab?c ⇒ "a + b(있어도 되고 없어도 된다) + c”정규표현식 (import re 필요)
사용 예시 : test_0001.txt 처럼 특정한 이름 지정 규칙을 따랐는데, 이 파일들만을 반환하고 싶으면, ^(test.+)\.txt$
- () :** 바로 앞에 있는 문자가 0부터 무한대로 반복
- re.sub(정규 표현식, 대상 문자열 , 치환 문자)
-
- 정규 표현식 - 검색 패턴을 지정
- 대상 문자열 - 검색 대상이 되는 문자열
- 치환 문자 - 변경하고 싶은 문자
-
- 참고1 | 이름짓기 (?P<이름> 정규표현식>)
- 참고2 | 정규패턴식 앞에 r이 붙어 있는 경우, 파이썬 정규식에는 Raw string이라고 한다. 컴파일 해야 하는 정규식이 Raw String(순수한 문자)임을 알려주는 것이다.
ex. os.chdir(r"C:\Users\") # r 의미 : 역슬래시를 이스케이프 문으로 인식하지 않고 주소로 인식
- 문자 클래스 [ ] : [ ] 사이의 문자들과 매치
참조 문서 : https://wikidocs.net/4308
07-2 정규 표현식 시작하기
[TOC] ## 정규 표현식의 기초, 메타 문자 정규 표현식에서 사용하는 메타 문자(meta characters)에는 다음과 같은 것이 있다. > ※ 메타 문자란 원래 ...
wikidocs.net
정규표현식을 처음 공부해 봤는데, 생각보다 응용하기 쉽지 않네요.
그렇지만, 확실히 복잡한 반복문 없이 문제를 해결할 수 있는 좋은 방법인 것 같습니다.
코딩도장에 있는 문제 중에 정규표현식으로 문제를 해결한 경우와 그렇지 않은 경우를 비교해 보았습니다.
문제: DashInsert 함수는 숫자로 구성된 문자열을 입력받은 뒤, 문자열 내에서 홀수가 연속되면 두 수 사이에 - 를 추가하고, 짝수가 연속되면 * 를 추가하는 기능을 갖고 있다. (예, 454 => 454, 4546793 => 454*67-9-3) DashInsert 함수를 완성하자
1. 반복문을 사용한 경우
2. 정규 표현식def DashInsert(ui): result = "%s" % ui[0] for i in range(len(ui)-1): if int(ui[i])%2 == 0 and int(ui[i+1])%2 == 0: result += '*' elif int(ui[i])%2 == 1 and int(ui[i+1])%2 == 1: result += '-' result += ui[i+1] return result ui = input("숫자로 구성된 문자열 입력>> ") print(DashInsert(ui))
import re print(re.sub(r'(([02468]{2,})|([13579]{2,}))', lambda x:'*'.join(x.group(2)) if x.group(2) else '-'.join(x.group(3)), input(":")))
https://codingdojang.com/scode/529?answer_mode=hide
코딩도장
프로그래밍 문제풀이를 통해서 코딩 실력을 수련
codingdojang.com
점프 투 파이썬에 있는 내용도 응용해서 사용하려면 오래 걸릴 것 같네요 ㅠㅠ
'파이썬' 카테고리의 다른 글
복소수 (0) | 2022.08.17 |
---|---|
++, --, +=,-=,*= 그리고 a,b = b,a (swap) (0) | 2022.08.09 |
파이썬 클래스 (0) | 2022.08.06 |
파이썬 print 함수 응용(sep, end,\n,f-string) (0) | 2022.07.27 |
리스트 표현식(List Comprehension) (0) | 2022.07.26 |