정규 표현 식 - re 모듈 의 일반적인 방법

6388 단어 파충
match 방법
match 방법 은 문자열 의 머리 를 찾 는 데 사 용 됩 니 다. 모든 일치 하 는 결 과 를 찾 는 것 이 아니 라 일치 하 는 결 과 를 찾 으 면 되 돌아 갑 니 다.그것 의 일반적인 사용 형식 은 다음 과 같다.
match(string[, pos[, endpos]])

그 중에서 string 은 일치 하 는 문자열 입 니 다. pos 와 endpos 는 선택 할 수 있 는 매개 변수 입 니 다. 문자열 의 시작 과 끝 위 치 를 지정 하고 기본 값 은 0 과 len (문자열 길이) 입 니 다.따라서 pos 와 endpos 를 지정 하지 않 을 때 match 방법 은 기본적으로 문자열 의 머리 와 일치 합 니 다.
일치 에 성 공 했 을 때 일치 하 는 대상 을 되 돌려 주 고 일치 하 는 대상 이 없 으 면 None 로 돌아 갑 니 다.
>>> import re
>>> pattern = re.compile(r'\d+')  #           

>>> m = pattern.match('one12twothree34four')  #     ,    
>>> print m
None

>>> m = pattern.match('one12twothree34four', 2, 10) #  'e'       ,    
>>> print m
None

>>> m = pattern.match('one12twothree34four', 3, 10) #  '1'       ,    
>>> print m                                         #      Match   
<_sre.sre_match object="" at="">

>>> m.group(0)   #     0
'12'
>>> m.start(0)   #     0
3
>>> m.end(0)     #     0
5
>>> m.span(0)    #     0
(3, 5)

위 에서 일치 하 는 데 성 공 했 을 때 일치 하 는 대상 을 되 돌려 줍 니 다. 그 중:
group ([group 1,...]) 방법 은 하나 이상 의 그룹 이 일치 하 는 문자열 을 얻 는 데 사 용 됩 니 다. 전체 일치 하 는 하위 문자열 을 얻 으 려 면 group () 또는 group (0) 을 직접 사용 할 수 있 습 니 다.
start ([group]) 방법 은 그룹 이 일치 하 는 하위 문자열 의 시작 위치 (하위 문자열 의 첫 번 째 문자 색인) 를 가 져 오 는 데 사 용 됩 니 다. 매개 변 수 는 기본 값 이 0 입 니 다.
end ([group]) 방법 은 그룹 이 일치 하 는 하위 문자열 의 끝 위치 (하위 문자열 의 마지막 문자 색인 + 1) 를 가 져 오 는 데 사 용 됩 니 다. 매개 변 수 는 기본 값 이 0 입 니 다.
span ([group]) 방법 을 되 돌려 줍 니 다 (start (group), end (group).
검색 방법
search 방법 은 문자열 의 모든 위 치 를 찾 는 데 사 용 됩 니 다. 일치 하 는 결 과 를 찾 으 면 되 돌아 갑 니 다. 일치 하 는 결 과 를 찾 는 것 이 아니 라 일반적인 사용 형식 은 다음 과 같 습 니 다.
search(string[, pos[, endpos]])

그 중에서 string 은 일치 하 는 문자열 입 니 다. pos 와 endpos 는 선택 할 수 있 는 매개 변수 입 니 다. 문자열 의 시작 과 끝 위 치 를 지정 하고 기본 값 은 0 과 len (문자열 길이) 입 니 다.일치 하 는 데 성공 하면 일치 하 는 대상 을 되 돌려 주 고 일치 하지 않 으 면 None 로 돌아 갑 니 다.
>>> import re
>>> pattern = re.compile('\d+')
>>> m = pattern.search('one12twothree34four')  #        match       
>>> m
<_sre.sre_match object="" at="">
>>> m.group()
'12'
>>> m = pattern.search('one12twothree34four', 10, 30)  #        
>>> m
<_sre.sre_match object="" at="">
>>> m.group()
'34'
>>> m.span()
(13, 15)

findall 방법
위의 match 와 search 방법 은 모두 한 번 에 일치 합 니 다. 일치 하 는 결 과 를 찾 으 면 돌아 갑 니 다.그러나 대부분의 경우 문자열 전 체 를 검색 하여 일치 하 는 결 과 를 얻 을 필요 가 있 습 니 다.findall 방법의 사용 형식 은 다음 과 같다.
findall(string[, pos[, endpos]])

그 중에서 string 은 일치 하 는 문자열 입 니 다. pos 와 endpos 는 선택 할 수 있 는 매개 변수 입 니 다. 문자열 의 시작 과 끝 위 치 를 지정 하고 기본 값 은 0 과 len (문자열 길이) 입 니 다.findall 은 일치 하 는 모든 하위 문자열 을 목록 으로 되 돌려 줍 니 다. 일치 하지 않 으 면 빈 목록 을 되 돌려 줍 니 다.
import re
pattern = re.compile(r'\d+')   #     

result1 = pattern.findall('hello 123456 789')
result2 = pattern.findall('one1two2three3four4', 0, 10)

print(result1)
print(result2)

실행 결과:
['123456', '789']
['1', '2']

finditer 방법
finditer 방법의 행 위 는 findall 의 행동 과 유사 하 며 전체 문자열 을 검색 하여 모든 일치 하 는 결 과 를 얻 을 수 있 습 니 다.일치 하 는 결과 (Match 대상) 의 교체 기 를 순서대로 접근 합 니 다.
import re
pattern = re.compile(r'\d+')

result_iter1 = pattern.finditer('hello 123456 789')
result_iter2 = pattern.finditer('one1two2three3four4', 0, 10)

print(type(result_iter1))
print(type(result_iter2))

print('result1...')
for m1 in result_iter1:   # m1   Match   
    print('matching string: {}, position: {}'.format(m1.group(), m1.span()))

print('result2...')
for m2 in result_iter2:
    print('matching string: {}, position: {}'.format(m2.group(), m2.span()))

실행 결과:


result1...
matching string: 123456, position: (6, 12)
matching string: 789, position: (13, 16)
result2...
matching string: 1, position: (3, 4)
matching string: 2, position: (7, 8)

split 방법
split 방법 은 일치 하 는 하위 문자열 에 따라 문자열 을 나 누 어 목록 으로 되 돌려 줍 니 다. 사용 형식 은 다음 과 같 습 니 다.
split(string[, maxsplit])

그 중에서 maxsplit 는 최대 분할 횟수 를 지정 하 는 데 사용 되 며 모든 분할 을 지정 하지 않 습 니 다.
import re
p = re.compile(r'[\s\,\;]+')
print(p.split('a,b;; c   d'))

실행 결과:
['a', 'b', 'c', 'd']

sub 방법
sub 방법 은 교체 에 사 용 됩 니 다.그것 의 사용 형식 은 다음 과 같다.
sub(repl, string[, count])

그 중에서 repl 은 문자열 일 수도 있 고 함수 일 수도 있 습 니 다. repl 이 문자열 이 라면 repl 을 사용 하여 문자열 마다 일치 하 는 하위 문자열 을 바 꾸 고 교 체 된 문자열 을 되 돌려 줍 니 다. 또한 repl 은 id 형식 으로 그룹 을 참조 할 수 있 으 나 번호 0 을 사용 할 수 없습니다.repl 이 함수 라면 이 방법 은 하나의 인자 (Match 대상) 만 받 아들 이 고 대체 할 문자열 을 되 돌려 야 합 니 다 (되 돌아 오 는 문자열 에 서 는 그룹 을 참조 할 수 없습니다).count 는 최대 교체 횟수 를 지정 하 는 데 사 용 됩 니 다. 정시 에 모두 교체 하 는 것 을 가리 키 지 않 습 니 다.
import re
p = re.compile(r'(\w+) (\w+)') #
s = 'hello 123, hello 456'

print(p.sub(r'hello world', s))  #    'hello world'    'hello 123'   'hello 456'
print(p.sub(r'\2 \1', s))        #     

def func(m):
    return 'hi' + ' ' + m.group(2)

print(p.sub(func, s))
print(p.sub(func, s, 1))         #       

실행 결과:
hello world, hello world
123 hello, 456 hello
hi 123, hi 456
hi 123, hello 456

일치 하 는 중국어
어떤 경우 에 우 리 는 텍스트 중의 한 자 를 일치 시 키 고 싶 습 니 다. 한 가지 주의해 야 할 것 은 중국어 의 유 니 코드 인 코딩 범 위 는 주로 [u4e 00 - u9fa 5] 에 있 습 니 다. 여기 서 말 하 는 것 은 이 범위 가 완전 하지 않 기 때 문 입 니 다. 예 를 들 어 전각 (중국어) 구두점 이 포함 되 지 않 았 지만 대부분 상황 에서 충분히 사용 할 수 있 을 것 입 니 다.
지금 문자열 title = u '안녕하세요, hello, 세계' 의 중국 어 를 추출 하고 싶다 면 이렇게 할 수 있 습 니 다.
import re

title = u'  ,hello,  '
pattern = re.compile(r'[\u4e00-\u9fa5]+')
result = pattern.findall(title)

print(result)

실행 결과:
['  ', '  ']

좋은 웹페이지 즐겨찾기