14. 정규 표현식
14.1. 개요
14.1.1. 개념
- 정규 표현식
- 일치시킬 하나 이상의 텍스트 검색 문자열을 설명하는 텍스트 모드,
14.1.2. 전형적인 장면
- 데이터 유효성 검사
- 텍스트 검색
- 텍스트 추출
- 텍스트 교체
- 텍스트 분할
14.1.3 구문
- 리터럴
• 일반 문자
탈출 할 필요가 •
• \
• ^
• $
•.
• |
•?
• *
• +
• ()
• []
• {}
- 메타 문자
14.1.4 매칭
- 단어, 미리 정의 된 메타 문자
•.의 \ n을 제외한 모든 문자
행 • \ D 디지털 등가 [0-9]
• \ D 디지털 수수료 당량 [^ 0-9]
• \ S 공백 문자 \ t \ n \ 연구 \ F \ V
• \ S 비 공백 문자 [^ \ t \ n \ R \ F \ V]
• \ 영숫자 w [A-ZA-Z0-9_]
• \ W 영숫자가 아닌 문자 [^ A-ZA-Z0-9_]
- 배치 옵션
• | 없음 | 예
- 정량 (방법 문자, 메타 문자, 문자의 반복)
•? 0 또는 1
• * 0 번 이상
• + 1 번 이상
• 특정
• {N, m} 순서 범위
• {N} n 번
• {N,} n 번 이상
- 욕심 아닌 욕심
• 탐욕 (기본값) : 결과의 최대 범위를 일치하도록 시도
• 비 욕심
결과의 최소 범위를 일치하도록 시도 •
• 방법 : 정량 추가?
• 예 :
• ??
• *?
• +?
- 국경 경기
• ^ 라인의 시작
선 • $ 끝
• \ B 단어 경계
• \ B 단어가 아닌 경계
• \ 시작에 입력
• Z 입력 끝 \
• 참고 : 다른 나 때문에 성능의 맥락에서 차이가 있습니다
14.2. 파이썬 일반
14.2.1 모듈
- 수입 재
14.2.2.의 RegexObject 일반 대상
- 스키마 객체, 컴파일의 성능 후 정규 표현식 (바이트 코드 및 캐시로 컴파일)
- 컴파일
• re.compile (R '모드')
• 예 1
(1 개) 수입 재 2 3 # : 사례 1 4 텍스트 = " .. 톰은 8 세입니다 마이크는 25 살입니다 " 5 6 # 귀갑 = re.compile ( '\ D +') 7 # patten.findall (텍스트) (8) (9) # 동일한 기능 10 11 # re.findall ( '\ D +'텍스트)
• 예 2
1 임포트 다시 2 3 # 사례 2 : 4 5 S = " \\ 저자 : 탐 " 6 귀갑 re.compile = ( ' \\ 저자 ' ) 7 patten.findall (들) (8) (9) # 출력 []이고, 코드 편집 요구에 다음과 같이 10 개 11 (S) = " \\ 저자 : 탐 " 12 귀갑 re.compile = ( ' \\\\ 저자 ' ) 13 patten.findall (S) 14 15 # 출력이 [하다 "\\ 저자 ]
- () .findall
모든 비 중복 일치를 찾기 •
모든 비 중복 일치를 찾기 •
• 반환 목록
• 예 1
# 사례 3 : 텍스트 = '톰 8 살입니다. 마이크는 23 살입니다. 피터 87 살입니다. ' 귀갑 = re.compile (R '\ + D') patten.findall (텍스트) # 출력은 [ '8', '23', '87']
• 예 2
# 사례 4 : 텍스트 = '톰 8 살입니다. 마이크는 23 살입니다. 피터 87 살입니다. ' p_name = re.compile (R '+ w [AZ] \') p_name.findall (텍스트) # 출력은 [ '톰', '마이크', '피터']
- .match (문자열 [POS [endpos는])
• 경기 만 시작 위치
• 리턴 매치 개체
• 예 1
# 케이스 5 : 텍스트 = "<HTML> <head> </ head> <body> </ body> </ HTML> '= re.compile 패턴 (R'<HTML>") pattern.match (텍스트) # 출력 <re.Match 오브젝트이고; 스팬 = (0, 6), 일치 "<HTML>"> =
• 예 2 : 공간을 추가
# 케이스 6 : 텍스트 = "<HTML> <head> </ head> <body> </ body> </ HTML> '# 加 了 一个 空格 패턴 = re.compile (R'<HTML>") pattern.match (텍스트) # 출력은 비어 있습니다
- .search (문자열 [POS [endpos는])
어디서든 검색 •
• 리턴 매치 개체
• 예 : 공백을 추가
# 케이스 7 : 텍스트 = "<HTML> <head> </ head> <body> </ body> </ HTML> '# 加 了 一个 空格 패턴 = re.compile (R'<HTML>") pattern.search (텍스트) # 출력 <re.Match 오브젝트이고; 스팬 = (1, 7), 일치 "<HTML>"> =
- .finditer ()
모든 일치를 찾기 •
• 일치 개체 반복자 반환 요소를 포함
• 예 : 당신은 결과의 탐색을 수행 할 수 있습니다
# 사례 8 : 텍스트 = '톰 8 살입니다. 마이크는 23 살입니다. 피터 87 살입니다. ' P1 = re.compile (R '\ + D')는 그것의 m 대 p1.finditer (텍스트) = 출력 (m) # 출력 # <re.Match 오브젝트이고; 스팬 = (7,8), 매치 = '8'> # <re.Match 객체; 스팬 = (28, 30), 매치 = '23 '> # <re.Match 객체; 스팬 = (51, 53), 매치 = '87 '>
14.2.3. MatchObject 정합 개체
- 성능 모드를 일치
- .그룹()
0 또는 null로 • 매개 변수는 전체 경기를 반환
반환은 특정 패킷 정보와 일치 • 참조가있는 경우
• 매개 변수는 그룹 이름이 될 수 있습니다
- .여러 떼()
• 모든 튜플의 하위 그룹화를 반환
- .start ()는 특정 패킷의 개시 인덱스를 돌려줍니다
- .END () 특정 패킷 종료의 인덱스를 돌려줍니다
- 실시 예 1에있어서 상술
수입 재 텍스트 = "톰은 8 살입니다. 제리는 23 살입니다." 패턴 = re.compile (R '\ + D') pattern.findall (텍스트) # 출력이다.? [ '8', '23'] = re.compile 패턴 (R '(\ D +) * (\ D +) ') m = pattern.search (텍스트) m # 1 출력된다 : <re.Match 객체; 스팬 = (7, 31), 일치 = '8 세. 제리 23 '> m.group () # 출력은 다음과 같습니다'8 살. 제리 23 'm.group (0) # 출력은 다음과 같습니다'8 세. 제리 '(1) # 출력은 m.group'23 8 'm.group (2) # 출력이'23 'm.start (1) # 출력은 7 m.end (1) # 출력 인 8 m.start (2) # 출력은 29 m.end (2) # 출력은 31 m.groups () #에 출력된다 ( '8' ', 23')
- .span ()는 특정 패킷 튜플의 시작과 끝의 인덱스를 돌려줍니다
- .groupdict ()는 사전 테이블 형태로 그룹 이름과 결과를 반환
- 예 2
# 사례 2 : 수입 재 패턴 = re.compile (R '(\ w +) (\ w +)') 텍스트 = "아름다운이 더 추한보다." pattern.findall (텍스트) # 출력은 : 잉크 (m.group ([( '는'다운 ')은, ('나은 ','이상 ')]는 그것에 m위한 pattern.finditer (텍스트) = )) # 출력은 다음과 같습니다 아름다운 #은보다 나은 #입니다
14.3. 그룹 정렬 화
14.3.1 장면
- 매칭 패턴으로부터 정보를 추출
- 장소는 수량되는 하위 응용 프로그램을 만듭니다
• 예
re.search 재 반입 (r'ab는 + C ','ababc ') #Output이다 : <re.Match 객체; 스팬 = (2, 5), 일치 = 'ABC'> re.search (R '(AB)이 + C', 'ababc') #Output 인 <re.Match 객체; 스팬 = (0, 5)는, 매치가 'ababc'> =
- 대안의 범위를 제한
• 예
에 re.search (r'Center | 재 ','센터 ') #Output은 다음과 같습니다 <re.Match 개체; 스팬 = (0, 6), 일치 = '중심'> re.search (r'Center | 재 ','중심 ') #Output이다 : <re.Match 객체; 스팬 = (4, 6), 일치 = '리'> re.search (r'Cent은 (ER | 재) ','중심 ') #Output 인 <re.Match 객체; 스팬 = (0, 6), 매치 = '중심'> re.search (r'Cent (ER | 재) ','중심 ') #Output이다 : <re.Match 객체; 스팬 = (0, 6), 경기 = '센터'>
- 규칙적인 패턴 추출에 재사용 내용
• 예
re.search (R '+ w (\) + \ 1', '안녕하세요 세계') #Output은 다음과 같습니다 빈 re.search (R '+ w (\) + \ 1', '안녕하세요 안녕하세요') #Output은 다음과 같습니다 <re.Match 객체; 스팬 = (0, 11), 매치 = '안녕하세요 안녕하세요'>
14.3.2. 결단의 확인
- (모드)
- (? P <이름> 패턴)
• 예
텍스트 = "톰 98"패턴 = re.compile (R '? (P <이름> \ + w) :( P <스코어> \ D +)') m = pattern.search (텍스트) m.group () # 출력은 다음과 같습니다 '톰 : 98'm.group (1) #Output는 '톰'm.group ( '이름') #Output는 '톰'm.group가 ( '점수') #Output입니다 : 98 '
14.3.3. 참조
- 일치는 ( '이름') m.group 객체
- 패턴 내에서 (? P = 이름)
- 실현 \ g <이름>
- 문자열 조작
14.3.4. 응용 프로그램
• .split (문자열, maxsplit = 0)
• 분할 문자열
• 예
수입 재 텍스트 = '아름다운 더 추한보다. \ nExplicit 더 나은 암시보다. \ nSimple 더 복잡한보다.' P = re.compile은 (R '\ n'을) p.split는 (텍스트) #Output입니다 : # [ '아름다운이 더 추한보다.'# '노골적인 더 나은 암시보다.'# '간단한 더 복잡한보다 . ']는 (R re.split'\ W '가,'좋은 아침 ')가 #Output는 ['좋음 ','아침 '] re.split (R'는 \ n ', 텍스트, 2) #Output이다 # [ '다운 더 추한 초과합니다.'# '명시 더 암시 초과합니다.'# '단순 복잡한보다 낫다.'] re.split (R '는 \ n', 텍스트는, 1) #Output이다 # [ '아름다운 더 추한보다.'# '노골적인 더 나은 암시보다. \ nSimple 더 복잡한보다.']
• .SUB (REPL은 문자열 = 0을 계산)
• 대체 문자열
• 예
ords = 'ORD000 \ nORD001 \ nORD003'의 re.sub (R '\ D +', '-', ords) #Output 인 'ORD- \ nORD- \ nORD-'의 re.sub (R '([AZ] + ) (\ D +) ','\ g <2> - \ g <1> 'ords) #Output는'000-ORD \ n001 만-ORD \ N003-ORD '텍스트 = "다운 추한보다 * 낫다 . ' 의 re.sub (R '의 <strong> </ strong>을'텍스트 '\ * (*) \ *.?') #Output은 다음과 같습니다. '아름다운 추한 이상에서 <strong> </ STRONG>는' 의 re.sub (R '의 <strong> \ g <1> </ strong>을'텍스트 '\ * (*) \ *.?') #Output는 '아름다운보다 더 나은 </ strong>을 <strong>입니다 추한.'
• .subn (REPL, 문자열, 개수 = 0)
교체 및 교체의 수를 반환 •
• 예
re.subn (R '([AZ] +) (\ D +)', '\ g <2> - \ g <1>'ords) #Output는 ( '000-ORD \ n001 만-ORD \ n003- ORD ', 3)
- 컴파일러 플래그
• 변경 규칙의 기본 동작
• re.I는 경우를 무시
• 예
텍스트 = '파이썬 파이썬 파이썬 re.search (r'python'텍스트) #Output이다 : <re.Match 객체; '[파이썬] re.findall (r'python'텍스트 re.I) # 스팬 = (7, 13), 매치 '파이썬> re.findall (r'python 텍스트)를 #Output 인'= 출력은 다음과 같습니다 [ '파이썬', '파이썬', 'PYTHON']
• re.M 여러 행과 일치
• 예
수입 재 re.findall (R '^ <HTML> ","\ n <HTML> ") #Output은 [] re.findall (R'^ <HTML>", "\ n <HTML>", 재. M) #Output이다 : "<HTML>"]
• re.S가 지정되었습니다. ""\ n을 포함한 모든 문자를 일치
• 예
[] re.findall (R '\ D ().', '1 \ NE're.S) #Output : #Output는 (R '. \ D ()', '1 \ NE')을 re.findall 같다 : "\ n ']
• ...
- 모듈 수준의 작업
• re.purge ()는 정규 캐시를 청소
• 예
re.purge ()
• re.escape () 이스케이프 문자
• 예
re.findall (R '^', '^ 파이썬 ^') #Output는 [ '] re.findall (re.escape ('^ ')'^ 파이썬 ^ ') #Output이다 : ['^ ' '^']
15. 시스템 도구
15.1. 개념
15.1.1. 명령 행 도구
15.1.2. 쉘 스크립트
15.1.3 시스템 관리
15.2. 시스템 모듈
15.2.1. SYS
- 파이썬 런타임의 세트를 매핑하는 운영 체제 기능을 제공합니다
- 휴대용 인터페이스 크로스 플랫폼 운영 시스템 프로그래밍을 제공
- 을 os.path 파일과 디렉토리 도구를 휴대 프로그래밍 인터페이스를 제공
- sys.platform
- sys.version
- sys.path에
- sys.modules에
- sys.exc_info는 () 마지막 예외 정보를 가져옵니다
15.2.2.
15.3. SYS
15.3.1. 플랫폼 및 버전
15.3.2. 관측 예외 사항
• 예
수입 SYS 가져 오기 시도 추적 : 제외 인상 KeyError를 : 인쇄 (sys.exc_info ()) # 출력은 다음과 같습니다 (<클래스 'KeyError를'>, KeyError를 (), <0x00000200332E6808에서 역 추적 객체>)
- traceback.print_tb (sys.exc_info () [2])
• 예
traceback.print_tb (sys.exc_info () [2]) # 출력은 : 파일 "<ipython 입력 70-1bc1bfcd4795 ->", 라인 (5)에 <모듈> 인상 KeyError를
15.3.3. 명령 줄 매개 변수
- sys.argv에
- 표준 입력 스트림 sys.stdin하면) (기본 입력에 상당
- 기본 인쇄에 sys.stdout 표준 출력 스트림에 해당 ()
- 표준 오류 스트림을 sys.stderr에
- os.environ
- .getcwd ()는 현재 작업 디렉토리를 가져옵니다
- .listdir (경로) 디렉토리 내용을 나열
- .chdir (경로) 작업 디렉토리를 변경하려면
- .getpid ()는 현재의 프로세스 ID를 취득
- .getppid ()는 현재 부모 프로세스 ID를 취득
- .system () 파이썬 스크립트는 쉘 명령어를 실행하는
- .popen () 명령의 입력을 실행하고 출력 스트림은 연결되어
- .mkdir ( '디렉토리 이름') 디렉토리를 만들 수 있습니다
- .rmdir ( '디렉토리 이름') 디렉토리를 삭제하려면
- .rename ( '구명', '새로운 이름') 개명
- .remove ( '파일 이름') 파일을 삭제합니다
- 분리기 .sep
- .pathsep 경로 구분
- .curdir 현재 디렉토리 기호를 기준으로
- .pardir 상위 디렉토리 기호를 기준으로
- .isdir (경로) 디렉토리 여부
- .isfile (경로) 파일이
- 이 경우 .exists (경로)
- .split (경로) 분할 경로
- .splitext (경로) 분할 경로 확장
- .join () 접속 경로
- .normpath ()로 정규화
- .abspath ()의 절대 경로