💡 위키백과
정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp 또는 regex, rational expression) 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어 이다.
문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단
<유용한 사이트>
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
Regexper
regexper.com
정규표현식
. - 줄바꿈 문자를 제외한 모든 글자를 검색, [.]의 경우에는 DOT(.)문자열과 매치됨
.x
임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미한다.
\ - 특수 문자 (., \\, [],{}, $ 등)를 찾을 때 필요
\^
escape 를 표현하며 ^ 를 문자로 사용함을 의미한다.
문자 클래스 [ ]
문자 클래스로 만들어진 정규식은 "[ ] 사이의 문자들과 매치"라는 의미를 갖는다.
= 문자 클래스를 만드는 메타 문자인 [ ] 사이에는 어떤 문자도 들어갈 수 있다
[[:alpha:]] - [a-zA-Z] 또는 [a-Z] 와 같은 표현
[[:digit:]] - [0-9]와 같은 표현
[[:alnum:]] - [a-Z0-9]와 같은 표현
[[:space:]] - 공백문자(space) 의미
- \b - 단어 경계에 대응한다.
- \B - 단어 경계가 아닌 부분에 대응된다.
- \d - 숫자와 매치, [0-9]와 동일한 표현식이다.
- \D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
- \s - whitespace 문자와 매치, [ \t \n \r \f \v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
- \S - whitespace 문자가 아닌 것과 매치, [^ \t \n \r \f \v]와 동일한 표현식이다.
- \w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
- \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.
메타 문자 { }
{ } 메타 문자를 사용하면 반복 횟수를 고정할 수 있다.
{m, n}정규식을 사용하면 반복 횟수가 m부터 n까지 매치할 수 있다.
ca{2,5}t ==> "c + a(2~5회 반복) + t"
cat = match X, caa...at = match O
x{n}
반복을 표현하며 x 문자가 n번 반복됨을 의미한다.
x{n,}
반복을 표현하며 x 문자가 n번 이상 반복됨을 의미한다.
x{n,m}
반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미한다.
s - space의 약자로 공백을 검색 ? 없거나 있거나 (zero or one)
* - 없거나 있거나 많거나 (zero or more)
x*
반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미한다.
+ - 하나 또는 많이 (one or more)
x+
반복을 표현하며 x 문자가 한번 이상 반복됨을 의미한다.
() - () 안에 내용을 갭쳐하며 그룹화
(x)
그룹을 표현하며 x 를 그룹으로 처리함을 의미한다.
(x)(y)
그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리된다.
출처 : https://hamait.tistory.com/342
/https?:\/\/[\w\-\.]+/g
'''
1. `http` => 로 시작하고,
2. `s?` => 다음에 s는 없거나 있고,
3. `:` => 다음에 : 가 오고,
4. `\/\/` => 다음에 특수기호 // 가 오고
5. `[\w\-\.]+` => \w(영문자, 언더스코어), 하이픈, 쩜 으로 이루어진 문자열이 한개 이상(+) 있다.
6. `g` => 매칭되는걸 모두 다 찾는다.(플래그)
'''
<tr.*?>(.*?)</tr>
'''
1. `<tr` ⇒ 로 시작한다.
2. `.*?>` ⇒ *tr 태그가 끝날 때까지*
3. *`(.*?)`* ⇒ 태그내 HTML 내용을 캡쳐
4. `</tr>` ⇒ 닫는 태그
'''
(?=) - (앞의 문자가 포함되어야 함)
(?!) - (앞의 문자가 포함되지 않아야 함)
(?<=) - (뒤의 문자가 포함되어야 함)
(?<!) - (뒤의 문자가 포함되지 않아야 함)
A(?=B) - B가 따라오는 (A에만 접근할 수 잇다.)
(x)(?:y)
그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다.
^ - 문자열의 시작 부분 표시
== /^A/라고 하면 반드시 문자열의 시작이 A로 시작하는 문자열에만 접근할 수 있다.
[^...]라고 하면 not의 의미를 가짐
$ - 문자열의 끝 부분 표시
== /A$/라고 하면 문자열의 마지막 A에만 접근할 수 있다.
== ^abc$start / end of the string
? - /A?B/라고 하면 A가 반복되도 B앞에 있는 단 하나의 A에만 접근할 수 있다 AB.
또는 A가 존재하지 않아도 B에 접근할 수 있다 B.
정규식 re import
re를 사용하기 위해서는 import re를 선언하고, re 내부 함수와 pattern을 정의하여 호출합니다.
re.compile(pattern, flags=0)
정규식 객체로 compile함
정규식 객체는 match, search, findall, finditer
match(pattern, string) | 문자열의 시작부분부터 매칭이 되는지 검색. |
search(pattern, string) | 문자열에 패턴과 매칭되는 곳이 있는지 검색. |
findall(pattern, string) | 정규식과 매치되는 모든 문자열을 리스트로 반환. |
finditer(pattern, string) | 정규식과 매치되는 모든 문자열을 iterator 객체로 반환. |
정보 추출 함수
group() | 매칭된 문자열. |
start() | 매칭된 문자열 시작 위치. |
end() | 매칭된 문자열 종료 위치. |
span() | 매칭된 문자열 시작과 종료위치를 튜플로 반환. |
match, search 차이
re.search 함수는 re.match 와 비슷하지만, 반드시 문자열의 처음부터 일치해야 하는 것은 아니다.
text | aaa | aaaB | Baaa | BBB |
re.match(r'aaa', text) | ○ | ○ | ✗ | ✗ |
re.search(r'aaa', text) | ○ | ○ | ○ | ✗ |
출처 : https://ponyozzang.tistory.com/279
출처 : https://kibua20.tistory.com/199
'IT 개인학습 > Memo' 카테고리의 다른 글
Encoding 인코딩 (0) | 2022.05.07 |
---|---|
Tempfile (0) | 2022.05.07 |
Deploy (0) | 2022.05.07 |
Jenkins 젠킨스 (0) | 2022.05.07 |
SQL (0) | 2022.05.07 |
댓글