본문 바로가기
IT 개인학습/Memo

정규표현식

by 그때 그때 끄적 2022. 5. 7.
💡 위키백과
정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp 또는 regex, rational expression) 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는  형식 언어 이다.

문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단

 

<유용한 사이트>

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

https://regexper.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

댓글