정규표현식_1

Updated:

정규표현식_1

import re
a = 'abcd'
p = re.compile('..')
print(p.match(a))

<re.Match object; span=(0, 2), match=’ab’>

+

list_a = ['','ab','a1b','a12b','a123b']

p = re.compile('.+')

for i in list_a:
    print(p.match(i))

*

None
<re.Match object; span=(0, 2), match=’ab’>
<re.Match object; span=(0, 3), match=’a1b’>
<re.Match object; span=(0, 4), match=’a12b’>
<re.Match object; span=(0, 5), match=’a123b’>

list_a = ['','ab','a1b','a12b','a123b']
p = re.compile('.*')

for i in list_a:
    print(p.match(i))

<re.Match object; span=(0, 0), match=’’>
<re.Match object; span=(0, 2), match=’ab’>
<re.Match object; span=(0, 3), match=’a1b’>
<re.Match object; span=(0, 4), match=’a12b’>
<re.Match object; span=(0, 5), match=’a123b’>

  • +는 현재값을 포함하지 않는다
  • *는 현재값을 포함한다

.

list_a = ['','ab','a1b','a12b','a12']
p = re.compile('..2.*')
# 2앞에 2개의 민 공간이 있는 문자열을 가져온다
for i in list_a:
    print(p.match(i))

None
None
None
<re.Match object; span=(0, 4), match=’a12b’>
<re.Match object; span=(0, 3), match=’a12’>

list_a = ['a','ab','a1b','a12b','123a']
p = re.compile('.*a.*')
# a를 포함한 모든 값들을 가져온다
for i in list_a:
    print(p.match(i))

<re.Match object; span=(0, 1), match=’a’>
<re.Match object; span=(0, 2), match=’ab’>
<re.Match object; span=(0, 3), match=’a1b’>
<re.Match object; span=(0, 4), match=’a12b’>
<re.Match object; span=(0, 4), match=’123a’>

list_a = ['a b','abbb','a1c','a12b','123ab','ab']
p = re.compile('.*a.*b.*')
# 문자열에 a와 b를 포함하면 가져온다
for i in list_a:
    print(p.match(i))

<re.Match object; span=(0, 3), match=’a b’>
<re.Match object; span=(0, 4), match=’abbb’>
None
<re.Match object; span=(0, 4), match=’a12b’>
<re.Match object; span=(0, 5), match=’123ab’>
<re.Match object; span=(0, 2), match=’ab’>

.{}

list_a = ['a b','abbb','a1c','a12b','123a b','a  b']
p = re.compile('a.{1,3}b')
# 문자열에 a로 시작하고 b로 끝나면서 사이의 거리가 1~3
for i in list_a:
    print(p.match(i))

<re.Match object; span=(0, 3), match=’a b’>
<re.Match object; span=(0, 4), match=’abbb’>
None
<re.Match object; span=(0, 4), match=’a12b’>
None
<re.Match object; span=(0, 4), match=’a b’>

list_a = ['12 aba','a ab','a1b','a12b','a123b']

p = re.compile('a')

for i in list_a:
    print(p.search(i))

# 가장 먼저 찾은 a의 위치를 가져온다

<re.Match object; span=(3, 4), match=’a’>
<re.Match object; span=(0, 1), match=’a’>
<re.Match object; span=(0, 1), match=’a’>
<re.Match object; span=(0, 1), match=’a’>
<re.Match object; span=(0, 1), match=’a’>

findall

a = 'ab a1b a12b a123a'
p = re.compile('a')

print(type(p.findall(a)))
print(p.findall(a))
# 문자열이 가지고 있는 a의 수만큼 a를 가져와서 list로 출력

<class ‘list’>
[‘a’, ‘a’, ‘a’, ‘a’, ‘a’]

finditer

a = 'ab a1b a12b a123a'
p = re.compile('a')

print(type(p.finditer(a)))
print(p.finditer(a))

# iterator객체로 반환

for i in p.finditer(a):
    print(i)

# iterator객체의 사용

<class ‘callable_iterator’>
<callable_iterator object at 0x0000019F24CC4C48>
<re.Match object; span=(0, 1), match=’a’>
<re.Match object; span=(3, 4), match=’a’>
<re.Match object; span=(7, 8), match=’a’>
<re.Match object; span=(12, 13), match=’a’>
<re.Match object; span=(16, 17), match=’a’>

group span start end

list_a = ['ab','a1b','a12b','a123b']

p = re.compile('a.*b')

for i in list_a:
    print(p.match(i).group())
# 해당 문자 출력
print()
for i in list_a:
    print(p.match(i).span())
# 해당 문자의 인덱스 범위 출력
print()
for i in list_a:
    print(p.match(i).start())
# 해당 문자의 인덱스 시작 출력
print()
for i in list_a:
    print(p.match(i).end())
# 해당 문자의 인덱스 끝 출력

ab
a1b
a12b
a123b

(0, 2)
(0, 3)
(0, 4)
(0, 5)

0
0
0
0

2
3
4
5

re.I

list_a = ['ab','a1b','a12b','a123b']
p = re.compile('A.*B',re.I)

# re.I를 사용하면 대소문자를 무시하고 출력한다

for i in list_a:
    print(p.match(i).span())

(0, 2)
(0, 3)
(0, 4)
(0, 5)

\d \D

list_a = ['ab','a1b','a12b','accb']
p = re.compile('a\db')

for i in list_a:
    print(p.match(i))
print()
p = re.compile('a\d\db')
# 숫자가 들어갔는지 확인
for i in list_a:
    print(p.match(i))
print()    
p = re.compile('a\D\Db')
# 숫자가 안들어갔는지 확인
for i in list_a:
    print(p.match(i))

None
<re.Match object; span=(0, 3), match=’a1b’>
None
None

None
None
<re.Match object; span=(0, 4), match=’a12b’>
None

None
None
None
<re.Match object; span=(0, 4), match=’accb’>

sub

list_a = ['ab','a1b','a12b','accb']
p = re.compile('a')
for i in list_a:
    print(p.sub('b',i))
# sub는 값에 해당하는 것을 바꾸어 준다

bb
b1b
b12b
bccb

list_a = ['ab','a1b','a12b','accb']
p = re.compile('a\db')

for i in list_a:
    print(p.sub('ddd',i))

# a와 b로 시작하고 사이에 숫자가 하나있으면 bbb로 변경

ab
ddd
a12b
accb

with def

list_a = ['ab','a1b','a12b','accb','a123b']
p = re.compile('a..b')

def plus_good(match):
    matched = match.group() #문자열
    return matched+'good'

# 함수를 사용하여 표현할 수 있다

for i in list_a:
    print(p.sub(plus_good,i))

ab
a1b
a12bgood
accbgood
a123b

Leave a comment