• python ์ •๊ทœ ํ‘œํ˜„์‹ ๋‚ด๋ง˜๋Œ€๋กœ ์ •๋ฆฌ

    2020. 2. 25.

    by. ํ•ด๋Š”์„ 

    1. (๋ฌธ์ž์—ด ์†Œ๋น„๊ฐ€ ์žˆ๋Š”) ๋ฉ”ํƒ€ ๋ฌธ์ž (meta characters) 

    ์›๋ž˜ ๊ทธ ๋ฌธ์ž๊ฐ€ ๊ฐ€์ง„ ๋œป์ด ์•„๋‹Œ, ํŠน๋ณ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ž.

     

    . ^ $ * + ? { } [ ] \ | ( )

    1) ๋ฌธ์ž ํด๋ž˜์Šค [ ]

    [ ] ์‚ฌ์ด์˜ ๋ฌธ์ž๋“ค๊ณผ ๋งค์น˜

    ex) [abc] ๋ผ๋ฉด a, b, c ์ค‘ ํ•œ๊ฐœ์˜ ๋ฌธ์ž์™€ ๋งค์น˜๋ผ๋Š” ๋œป.

     

    ํ•˜์ดํ”ˆ(-) ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋ƒ„. [a, b, c] == [a-c], [0-5] ๋“ฑ๋“ฑ

    • [a-zA-Z] : ์•ŒํŒŒ๋ฒณ ๋ชจ๋‘
    • [0-9] : ์ˆซ์ž

    ์ฃผ์˜ํ•  ์  : [ ] ์•ˆ์—๋Š” ์–ด๋–ค ๋ฌธ์ž๋‚˜ ๋ฉ”ํƒ€ ๋ฌธ์ž๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ^์€ not์˜ ๋œป์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

    ์•„๋ž˜๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ž ํด๋ž˜์Šค ์ด๋‹ค.

     

    • \d = [0-9]
    • \s = whitespace ๋ฌธ์ž์™€ ๋งค์น˜.
    • \w = ๋ฌธ์ž+์ˆซ์ž(alphanumeric)  : word ๋ฅผ ํ‘œํ˜„ํ•˜๋ฉฐ ์•ŒํŒŒ๋ฒณ + ์ˆซ์ž + _ ์ค‘์˜ ํ•œ ๋ฌธ์ž์ž„์„ ์˜๋ฏธํ•œ๋‹ค. 

     

    ์†Œ๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉด ๋ฐ˜๋Œ€ ๋œป์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

     

     

    2) Dot (.)

    \n์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž์™€ ๋งค์น˜๋จ์„ ์˜๋ฏธํ•œ๋‹ค.

     

    ex) a.b = a + all character + b

    ๋งŒ์•ฝ, a[.]b๋กœ ํ‘œ๊ธฐ๋œ๋‹ค๋ฉด, ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์ •๋ง a.b๋‹ค. (์ ์œผ๋กœ์„œ์˜ ๋œป)

     

     

    3) ๋ฐ˜๋ณต (*)

    * ์•ž์— ์˜ค๋Š” ๋ฌธ์ž๊ฐ€ 0๋ถ€ํ„ฐ ๋ฌดํ•œ๋Œ€๋กœ ๋ฐ˜๋ณต๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ. ์ฆ‰, *์•ž์— ๋ฌธ์ž๊ฐ€ ์—†์–ด๋„ 0๋ฒˆ ๋ฐ˜๋ณต๋œ๊ฑธ๋กœ ๋ฐ›์•„๋“ค์—ฌ์„œ matchํ•ด์ค€๋‹ค. 

     

     

    4) ๋ฐ˜๋ณต (+)

    ์–˜๋Š” ์ตœ์†Œ ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ 1! ๊ทธ๋‹ˆ๊นŒ ์ ์–ด๋„ ํ•œ๋ฒˆ์€ ๋‚˜์™€์•ผ ํ•œ๋‹ค.

     

     

    5) ๋ฐ˜๋ณต ({m, n})

    ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•˜๊ณ  ์‹ถ์„ ๋•Œ! ์ฆ‰ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. m, n์ž๋ฆฌ์— ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. m์ด ์ƒ๋žต๋˜๋ฉด 0์„, n์ด ์ƒ๋žต๋œ๋‹ค๋ฉด ๋ฌดํ•œ๋Œ€๋ฅผ ๋œปํ•œ๋‹ค.

     

    {1,} == +

    {0,} == *

     

    a{2}๋ผ๊ณ  ํ•˜๋ฉด, ๋ฐ˜๋“œ์‹œ a๊ฐ€ 2๋ฒˆ ๋ฐ˜๋ณต ๋˜์–ด์•ผ ํ•œ๋‹ค.

     

     

    6) ๋ฌผ์Œํ‘œ ?

    ? == {0, 1}

    ์ฆ‰, ์žˆ์–ด๋„ ๋˜๊ณ  ์—†๋„ ๋œ๋‹ค๋ฅผ ๋œปํ•œ๋‹ค.

     

     

    2. re module

    python์—์„œ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ง€์›ํ•œ๋‹ค. re = regular expression

    import re
    p = re.compile('ab*')

    re.compile ์„ ์ด์šฉํ•ด์„œ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ปดํŒŒ์ผ ํ•œ๋‹ค. ์ด ์ปดํŒŒ์ผ์˜ ๊ฒฐ๊ณผ๋กœ ๋ฐ›๋Š” ๊ฐ์ฒด p๋ฅผ ์ด์šฉํ•ด์„œ ์ดํ›„์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

     

    ํŒจํ„ด ๊ฐ์ฒด๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ๋•Œ์—” ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    m = re.match('[a-z]+', "python")

     

    3. ์ •๊ทœ์‹์„ ์ด์šฉํ•œ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰

    ์ปดํŒŒ์ผ ๋œ ํŒจํ„ด ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    1) match()

    ๋ฌธ์ž์—ด์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋Š”์ง€ ์กฐ์‚ฌ.

    ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋ฉด ๋งค์น˜๋œ ๊ฐ์ฒด๋ฅผ ๋Œ๋ ค์คŒ. ์•„๋‹ˆ๋ฉด None.

    ์ฒ˜์Œ๋ถ€ํ„ฐ ์กฐ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ๋ถ€ํ„ฐ ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ”๋กœ none....

    p = re.compile(์ •๊ทœํ‘œํ˜„์‹)
    m = p.match( 'string goes here' )
    if m:
        print('Match found: ', m.group())
    else:
        print('No match')

     

    2) search()

    ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋Š”์ง€ ์กฐ์‚ฌ.

    ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋ฉด ๋งค์น˜๋œ ๊ฐ์ฒด๋ฅผ ๋Œ๋ ค์คŒ. ์•„๋‹ˆ๋ฉด None.

    ์ „์ฒด๋ฅผ ์กฐ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด์˜ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ๋งค์น˜๋˜์ง€ ์•Š๋”๋ผ๋„ ๋’ค์— ๋ฌธ์ž๊ฐ€ ๋งค์น˜๋œ๋‹ค๋ฉด ๋’ค์˜ ๋ฌธ์ž๋ฅผ ๋ฆฌํ„ด.

     

    3) findall() 

    ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฆฌํ„ด

     

    4) finditer()

    ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ ๋Œ๋ ค์ค€๋‹ค.

     

    4. match ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ

    match, search๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋กœ ๋Œ๋ ค์ค€  match๊ฐ์ฒด์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‹ค.

     

    group() : ๋งค์น˜๋œ ๋ฌธ์ž์—ด์„ ๋Œ๋ ค์คŒ

    start() : ๋งค์น˜๋œ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ๋Œ๋ ค์คŒ

    end() : ๋ ์œ„์น˜๋ฅผ ๋Œ๋ ค์คŒ

    span() : ์‹œ์ž‘, ๋์— ํ•ด๋‹นํ•˜๋Š” ํŠœํ”Œ์„ ๋Œ๋ ค์คŒ.

     

    5. ์ปดํŒŒ์ผ ์˜ต์…˜

    1) DOTALL, S

    . ๋ฉ”ํƒ€ ๋ฌธ์ž์— \n๋„ ํฌํ•จํ•ด์„œ ๋งค์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

    ๋ณดํ†ต ์—ฌ๋Ÿฌ ์ค„๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ \n์— ์ƒ๊ด€์—†์ด ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

    p = re.compile('a.b', re.DOTALL)
    m = p.match('a\nb')

     

    2) IGNORECASE, I

    ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„ ์—†์ด ๋งค์น˜๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

     

    3) MULTILINE, M

    ^, $ ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ๋ฌธ์ž์—ด์˜ ๊ฐ ์ค„๋งˆ๋‹ค ์ ์šฉํ•ด ์ค€๋‹ค.

     

    4)VERBOSE, X

    ์ •๊ทœ์‹์„ ์ค„ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•ด์ค€๋‹ค.

    ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด์— ์‚ฌ์šฉ๋œ whitespace๋Š” ์ปดํŒŒ์ผ ํ•  ๋–„ ์ œ๊ฑฐ๋œ๋‹ค.

     

    6. (๋ฌธ์ž์—ด ์†Œ๋น„๊ฐ€ ์—†๋Š”) ๋ฉ”ํƒ€ ๋ฌธ์ž

    1) | (or)

    A|B ๋ผ๋ฉด A๋˜๋Š” B๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.

    p = re.compile('Crow|Servo')
    m = p.match('CrowHello')
    # Crow return

     

    2) ^

    ๋ฌธ์ž์—ด์˜ ๋งจ ์ฒ˜์Œ๊ณผ ์ผ์น˜ํ•จ์„ ์˜๋ฏธ. ์ฆ‰, ์ฐพ๋Š” ๋ฌธ์ž์—ด์ด ๋งจ ์ฒ˜์Œ์— ์žˆ์„ ๋•Œ๋งŒ ๋ฆฌํ„ดํ•˜๊ณ , ์•„๋‹ˆ๋ฉด none์„ ๋ณด์ธ๋‹ค.

    re.MULTILIENE์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์—ฌ๋Ÿฌ์ค„์˜ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ ๊ฐ๊ฐ ์ค„์˜ ์ฒ˜์Œ์„ ๋œปํ•œ๋‹ค.

    ์ฐพ๋Š” ๋ฌธ์ž์˜ ์•ž์— ์‚ฌ์šฉํ•œ๋‹ค.

     

    3) $

    ^์™€ ๋ฐ˜๋Œ€๋กœ ๋ฌธ์ž์—ด์˜ ๋๊ณผ ๋งค์น˜ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

    ์ฐพ๋Š” ๋ฌธ์ž ๋’ค์— ์‚ฌ์šฉํ•œ๋‹ค.

     

    ^๊ณผ $์„ ๊ทธ๋ƒฅ ๋ฌธ์ž ๊ทธ ์ž์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐฑ์Šฌ๋ž˜์‹œ \ ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

     

    4) \A

    \A๋Š” ๋ฌธ์ž์—ด์˜ ์ฒ˜์Œ๊ณผ ๋งค์น˜๋จ์„ ์˜๋ฏธํ•œ๋‹ค. ^๊ณผ ๋™์ผํ•œ ์˜๋ฏธ์ง€๋งŒ, MULTILINE์˜ต์…˜์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

     

    5) \Z

    ๋ฌธ์ž์„์˜ ๋๊ณผ ๋งค์น˜๋จ์„ ์˜๋ฏธํ•œ๋‹ค. $๊ณผ ๋™์ผํ•œ ์˜๋ฏธ์ง€๋งŒ, MULTILINE์˜ต์…˜์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. 

     

    6) \b

    ๋‹จ์–ด ๊ตฌ๋ถ„์ž(word boundary)์ด๋‹ค. ๋‹จ์–ด๋Š” whitespace์— ์˜ํ•ด ๊ตฌ๋ถ„๋˜๋‹ค.(๋ณดํ†ต) ์‚ฌ์šฉํ•  ๋•Œ, ํŒŒ์ด์ฌ ๋ฆฌํ„ฐ๋Ÿด ๊ทœ์น™์„ ์œ„ํ•ด \b๊ฐ€ ๋ฐฑ์ŠคํŽ˜์ด์Šค๊ฐ€ ์•„๋‹˜์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์•ž์— r์„ ๋ฐ˜๋“œ์‹œ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค.

    Ex) r'\bclass\b'

     

    7) \B

    ์œ„์™€ ๋ฐ˜๋Œ€๋กœ, whitespace๋กœ ๊ตฌ๋ถ„๋˜์ง€ ์•Š์€ ๋‹จ์–ด๋งŒ ๋งค์น˜.

     

    7. ๊ทธ๋ฃจํ•‘ ( )

    ๋ฌธ์ž ๊ฐœ๊ฐœ์ธ์œผ๋กœ ๋ณด๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค!

    Ex) (ABC)+

     ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜๋Š” ๋ณด๋‹ค ํฐ ์ด์œ ๋Š” ๋งค์น˜๋œ ๋ฌธ์ž์—ด ์ค‘์—์„œ ํŠน์ • ๋ถ€๋ถ„์˜ ๋ฌธ์ž์—ด๋งŒ ๋ฝ‘์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ๋‹ค.
    p = re.compile(r"\w+\s+\d+[-]\d+[-]\d+")
    m = p.search("park 010-1234-1234")

    ์ด๋ฆ„ + " " + ์ „ํ™”๋ฒˆํ˜ธ ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ์ •๊ทœ์‹์ด๋‹ค. ์ด ๋ฌธ์ž์—ด์—์„œ ์ด๋ฆ„๋งŒ ๋ฝ‘์•„๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด?

    p = re.compile(r"(\w+)\s+\d+[-]\d+[-]\d+")
    m = p.search("park 010-1234-1234")
    print(m.group(1))  #park

    group์˜ ์ธ๋ฑ์Šค๋Š” 0์ด ๋งค์น˜๋œ ์ „์ฒด ๋ฌธ์ž์—ด, ๊ทธ๋ฆฌ๊ณ  1๋ถ€ํ„ฐ ์ฒซ๋ฒˆ์งธ, 2๊ฐ€ ๋‘๋ฒˆ์จฐ ๊ทธ๋ฃน ๋“ฑ๋“ฑ์„ ๋งค์น˜ํ•œ๋‹ค.

    ๊ทธ๋ฃน์„ ์ค‘์ ‘ํ•ด์„œ ์Œ“์„ ์ˆ˜๋„ ์žˆ๋‹ค!

     

    (\w+)\s+((\d+)[-]\d+[-]\d+)

     

    ์ด๋ ‡๊ฒŒ ๊ทธ๋ฃจํ•‘ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด 1 - ์ด๋ฆ„, 2 - ์ „ํ™”๋ฒˆํ˜ธ, 3-๊ตญ๋ฒˆ ์ด ๋œ๋‹ค.

     

    1) ๊ทธ๋ฃจํ•‘๋œ ๋ฌธ์ž์—ด ์žฌ์ฐธ์กฐ

    (\b\w+)\s+\1
    (๊ทธ๋ฃน) + " " + ๊ทธ๋ฃน๊ณผ ๋™์ผํ•œ ๋‹จ์–ด

    ์™œ๋ƒํ•˜๋ฉด \1์ด ์ •๊ทœ์‹์˜ ๊ทธ๋ฃน ์ค‘ ์ฒซ ๋ฒˆ์งธ ๊ทธ๋ฃน์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‘ ๋ฒˆ์งธ ๊ทธ๋ฃน์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด \2๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

     

    2) ๊ทธ๋ฃจํ•‘๋œ ๋ฌธ์ž์—ด ์ด๋ฆ„ ๋ถ™์ด๊ธฐ

    (?P<๊ทธ๋ฃน๋ช…>...)

    ์ด ํ™•์žฅ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ทธ๋ฃน์— ์ด๋ฆ„์„ ์ง€์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

    p = re.compile(r"(?P<name>\w+)\s+((\d+)[-]\d+[-]\d+)")
    m = p.search("park 010-1234-1234")
    print(m.group("name")) #park

    ์ด๋ฆ„์œผ๋กœ ์žฌ์ฐธ์กฐ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    (?P=๊ทธ๋ฃน์ด๋ฆ„)
    p = re.compile(r'(?P<word>\b\w+)\s+(?P=word)')
    p.search('Paris in the the spring').group() #the the

     

    8. ์ „๋ฐฉ ํƒ์ƒ‰

    Lookahead Assertions!

     

    1) ๊ธ์ •ํ˜• ์ „๋ฐฉ ํƒ์ƒ‰

    (?=...)์„ ์‚ฌ์šฉ

    ...์— ํ•ด๋‹น๋˜๋Š” ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์กฐ๊ฑด์ด ํ†ต๊ณผ๋˜์–ด๋„ ๋ฌธ์ž์—ด ์†Œ๋น„ NO!

    (์—ฌ๊ธฐ์„œ ์†Œ๋น„๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์€, match๋ฅผ ๋ฆฌํ„ดํ•  ๋•Œ ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป

    ์ฆ‰, ๊ฒ€์ƒ‰์—๋Š” ํฌํ•จ๋˜์ง€๋งŒ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ๋Š” ์ œ์™ธ๋œ๋‹ค!)

     

    2) ๋ถ€์ •ํ˜• ์ „๋ฐฉ ํƒ์ƒ‰

    (?!...)์„ ์‚ฌ์šฉ

    ...์— ํ•ด๋‹น๋˜๋Š” ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ, ์กฐ๊ฑด์ด ํ†ต๊ณผ๋˜์–ด๋„ ๋ฌธ์ž์—ด ์†Œ๋น„ NO!

     

    9. ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ

    sub ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋Š” ๋ถ€๋ถ„์„ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

    sub ๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฐ”๊ฟ€ ๋ฌธ์ž์—ด, ๋‘ ๋ฒˆ์จฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋Œ€์ƒ ๋ฌธ์ž์—ด์ด ๋œ๋‹ค. ๊ทธ๋Ÿผ ๋Œ€์ƒ ๋ฌธ์ž์—ด์—์„œ ํ•„ํ„ฐ๋กœ ๊ฑธ๋ฆฌ๋Š” ๋ถ€๋ถ„๋งŒ ๋ฐ”๊ฟ€ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค!

    p = re.compile('(blue|white|red)')
    p.sub('colour', 'blue socks and red shoes')
    #'colour socks and colour shoes'

    ๋”ฑ ํ•œ๋ฒˆ๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ count๊ฐ’์„ ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค.

    p.sub('colour', 'blue socks and red shoes', count=1)
    #'colour socks and red shoes'

     

    10. ์ž์ฃผ ์“ฐ๋Š” ํ‘œํ˜„๋“ค

    1) ์ˆซ์ž๋งŒ : ^[0-9]*$

    2) ์˜๋ฌธ์ž๋งŒ : ^[a-zA-Z]*$

    3) ํ•œ๊ธ€๋งŒ : ^[๊ฐ€-ํžฃ]*$

    4) ์˜์–ด & ์ˆซ์ž๋งŒ : ^[a-zA-Z0-9]*$

    5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$

    6) ํœด๋Œ€ํฐ : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

    7) ์ผ๋ฐ˜์ „ํ™” : ^\d{2,3} - \d{3,4} - \d{4}$

    8) ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ : \d{6} \- [1-4]\d{6}

    9) IP ์ฃผ์†Œ : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})

     

     


    Reference

    https://hamait.tistory.com/342

    https://developsd.tistory.com/55

    https://wikidocs.net/4308

    https://wikidocs.net/4309

    ๋Œ“๊ธ€