정규 표현식
정의 :
정규 표현식은 문자 (A)의 구성 논리적 수식을 문자열 조작, 특정 문자의 조합에 의해 미리 정의 된, 이러한 특정 문자, " 규칙 문자열 ", " 규칙 문자열은 " 문자열을 표현하는 데 사용됩니다 필터링 로직.
그것은 독립적 인 규칙입니다 , 언어의 독립. 문자열 만 취급.
우리는 무엇을 할 수 있습니까?
예 1 : 숫자를 찾아 모든 휴대폰에서 파일을 넣어;
# 열기 파일을 엽니 다
# 읽기 파일 STR
# 의 긴 목록에서 모든 문자열 찾기 (11) 자리를
# A는 문자로 문자를 읽어
예 2 : 파충류, 당신은 문자열 웹 페이지에서 원하는 데이터를 얻을 수 있습니다
실시 예 3 : 특정 콘텐츠의 로그를 추출
규칙
문자 그룹 :
[] 괄호 내용의 글 , 에 규칙에 맞춰 그들이 문자 다음과 같은 특정 위치에 표시됩니다
[0-9] 경기 번호
[AZ]는 소문자 일치
[AZ]는 대문자와 일치
[4-9] 와 일치 . 4 로 . 9 개 수치
[A-ZA-Z] 일치 대문자
[A-ZA-Z0-9]는 소문자와 일치 + 숫자
[A-ZA-Z0-9_] 매치 라인의 숫자 감소
탈출 + 메타 문자를
\ 승 일치 라인 숫자 감소 단어 키워드를 [A-ZA-Z0-9_]
\ D 모든 숫자 일치 숫자 [0-9]
\들 공백 캐리지 리턴 일치 / 라인 피드 탭 공간의 공간 [\ n의 \의 t]를
\ W \ D \ S 및 \ D \ S w \ 부정
\ B는 단어의 경계를 나타냅니다
[\ S \ S] \ D \ D]는 [\ w \ W] 세 코퍼스 의미 모든 문자와 일치
그리고 문자는 이스케이프와 관련된 메타 문자
\ w \ D \ S (\ n의 \의 t) \ B 형 \의 W \ D \ S
메타 문자
^ 문자열의 시작을 일치
$는 문자열의 끝을 일치
. 일치를 나타냅니다 줄 바꿈을 제외한 제외한 모든 문자를
[] 만큼 브래킷 콘텐츠에 나타나는 일치 될 수있다
[^] 만큼 브래킷에는 콘텐츠가 이제 매칭되지 않을 수 있으므로
A | B 또는 준수 규칙 또는 B 규칙이 일치 될 수 있습니다
# 경우 규칙이있다 ㄱ 규칙의 일부 , 그리고 이상의 규칙 B 가혹한에 규칙 / 길이 , 넣어 규칙 사설을
# 더 복잡한 \ 상단에 기록 된 이상 규칙
() 시간 제약 수량 어의 요구를 표현하기 위해 함께 여러 문자를 그룹화 , 같은 그룹에이 한정사를 제공
정량
{N}는 한정 기호 문자가 앞에 나타납니다 나타내는 n 개의 배
{N}는 이전의 정량 문자는 적어도 나타납니다 나타내는 N 배
{N, m}을 나타내는 이전 문자의 정량 표시 나노 회
? 문자가 표시되기 전에 한정사를 나타냅니다 0 번 또는 1 없어도되는 표현 번
+ 문자가 한정사 전에 나타나는 나타냅니다 1 회 이상
* 수량 지시가 표시되기 전에 문자를 나타냅니다 0 번 이상
운동 :
일치 정수 \ D +
경기 진수 \ D + \. \ D +
소수점 또는 정수 일치 \ D + \ \ D + |을 . \ D + \ D + (\ \ D +.)?
ID 번호 (유효성 검사 규칙의 옆 고려) 일치 :
[1-9] \ d 개 {14} (\의 D {2} \ d 배속])?
[1-9] \ d 개 {16} \ d 배속] | [1-9] \ d 개 {14}
탐욕 일치
허용의 범위에서 가장 긴 결과를 복용
비 욕심 패턴 / 비활성 경기 : 후면 정량 플러스에서 ?
. *? X는 그것이 어떤 길이 만날 때까지 비 개행 문자와 일치 X의 중지
문자 + 정량 제약 연속 된 문자의 수
문자 + 한정 기호 +? 연속 문자의 제약 최소한의
문자 + 한정 기호 +? + X 연속 한정사의 범위 내에서 문자의 제약 최소 번호 , 만난 x는 즉시 정지
이러한 정규 표현식 자신의 규칙 및있는 파이썬 머리카락 관계
다시 모듈
findall은 : 요소를 그 각각의 모든 목록을 일치
검색 : 오직 우측 제 1 좌측 일치 , 직접적인 결과는 얻어지지 않고 , 그러나 변수 , 이 변수를 통해 그룹 에있어서의 결과를 얻을
이 경우에는 일치하는 , 그것은 반환하지 않습니다 없음을 사용하여 그룹을 불평 할 것이다
절차는 일반적으로 다음과 같이 사용된다 :
경기 : 스크래치 경기 , 에 해당 검색 정규 표현식은 추가 ^
확장 문자열 처리 : 절단 교체
스플릿
하위 된 새로운 대체 번호
subn는 튜플을 반환 , 두번째 엘리먼트는 교체의 개수
컴파일 모듈은 시간을 절약
직접 정규 표현식에 여러 사용하는 과정에서, 바이트 코드로 컴파일, 배수가 아닌 컴파일
finditer 문제를 해결하기 위해 정규식을 사용하여 공간을 절약 / 메모리
패킷
그룹 ()가 전체 매칭의 함량을 나타내고, 그룹 (NUM)는 첫 번째 일치하는 대표 NUM 패킷
오기 다시
S = "행복 매일 <A> </a>에"
RES = re.search ( '(<\ W +>) ([\ W \ W이다] +) (</ \ W +>)' , S)
전단 (res.group ()) # 모든 결과
인쇄 (res.group. (1)) # 1의 패킷 번호의 수가 나타내는
인쇄 (res.group (2))
프린트 (res.group이. (3))
수출
findall은 우선 순위
= re.findall RET ( '는 WWW (바이두 |.시나) .COM의' , 'www.sina.com' )
인쇄 (RET) findall은 그룹 일치의 내용을 반환하는 우선 순위를 부여하기 때문이다 [ '시나의'] # 개, 당신이 결과와 일치 할 경우에 허가를 취소 RET = re.findall ( '는 WWW를 (? :. 바이두 |시나) .COM의' , 'www.sina.com' ) 인쇄 (RET) # [ 'www.sina.com ']