λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
IT κ°œμΈν•™μŠ΅/Memo

μ •κ·œν‘œν˜„μ‹

by kiimy 2022. 5. 7.
728x90
πŸ’‘ μœ„ν‚€λ°±κ³Ό
μ •κ·œ ν‘œν˜„μ‹(正規葨現式, μ˜μ–΄: 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

728x90

'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

λŒ“κΈ€