본문 바로가기
개발일지/Python

python 정규표현식 re로 문자열 안의 값을 꺼내기, 변경해주기

by 개발에정착하고싶다 2022. 7. 8.
320x100
import re

 

# 메타문자
# 메타문자는 특별한 의미를 가진 정규 표현식 문자들이다.

|
()
[]
.
*
+
?
^
$
(?P<이름>)

 

# 정규표현식 re 사용방법 1
# 문자열 내에 등장하는 패턴의 횟수를 세기


string = 'The quick brown fox jumps over the lazy dog.'
# 공백을 기준으로 string 변수에 담긴 값을 나누어서 list에 담아준다.
string_list = string.split()

# r은 원시문자열 표기법으로써 \, \t, \n같은 특수한 문자들을 따로 처리하지 않도록 한다는 의미다.
# 'The', re.I 는 The 라는 문자에 대해서 대소문자를 가리지 않고 잡아낸다. 라는 뜻이다.
# 즉, re.I 는 앞에 지정된 문자에 대해서 대소문자를 가리지 않고 집어 낸다. 라는 의미를 가지고 있다.
pattern = re.compile(r'The', re.I)
count = 0

# 이를 해석하자면 기본적으로 string_list에는 string에서 공백을 기준으로 split된 9개의 원소가 있다.
# 그것을 순서대로 한개씩 뽑아 내는 거다.
for word in string_list:
    
    # 9개의 string_list에서 1개씩 나올때마다 pattern에 지정해 주었던 조건대로 대소문자에 상관없이 the 를 true값으로 출력한다.
    
    if pattern.search(word):
        count += 1
        print(word)
        
print('Output #38: {0:d}'.format(count))

결과값

The
the
Output #38: 2

 

# 정규표현식 re 사용방법 2
# 문자열 내에서 발견된 패턴 출력하기

string = 'The quick brown fox jumps over the lazy dog.'
string_list = string.split()
pattern = re.compile(r'(?P<match_word>)The', re.I)
print('Output #39:')
for word in string_list:
    if pattern.search(word):
        print('{:s}'.format(pattern.search(word).group('match_word')))



# 3번째줄의 <match_word>라는 것을 지정해주고,
# 그것을 마지막 줄에서 그룹화 시켜준다는데
# 실질적인 출력은 되지 않고, 이것에 대해선 아직 잘 모르겠다.

결과값

Output #39:

 

# 문자열 내 'the'를 'a'로 대체하기

string = 'The quickbrown fox jumps over the lazy dog.'
string_to_find = r'The'
pattern = re.compile(string_to_find, re.I)
print('Output #40: {:s}'.format(pattern.sub('a', string)))

결과값

Output #40: a quickbrown fox jumps over a lazy dog.
300x250