python 학습 노트 - DAY 4 (2)

10807 단어
정규 표현 식
 
문법:
import re #     
 
p = re.compile("^[0-9]")  #           , ^       ,[0-9]    0 9       ,                     ,                  ,       
 
m = p.match('14534Abc')   #                  ,        ,  m    ,   m None<br><br>if m: #         
  print(m.group())    #m.group()        ,   1,       1    <br>else:<br>  print("doesn't match.")<br>

합병 후 다음 과 같다
m = p.match("^[0-9]",'14534Abc')

상기 두 단락 의 코드 효 과 는 같다. 첫 번 째 방식 은 일치 하 는 형식 을 미리 컴 파일 하 는 것 이다.만약 5w 줄 의 파일 에서 숫자 로 시작 하 는 모든 줄 을 일치 시 킬 필요 가 있다 면, 먼저 정규 공식 을 컴 파일 한 다음 일치 시 키 는 것 을 권장 합 니 다. 그러면 속도 가 빠 를 것 입 니 다.
 
일치 형식
 
패턴
묘사 하 다.
^
문자열 의 시작 과 일치 합 니 다.
$
문자열 의 끝 과 일치 합 니 다.
.
임의의 문자 와 일치 합 니 다. 줄 바 꿈 자 를 제외 하고 re. DOTALL 태그 가 지정 되 었 을 때 줄 바 꿈 자 를 포함 한 임의의 문자 와 일치 할 수 있 습 니 다.
[...]
한 그룹의 문 자 를 표시 하 는 데 사용 합 니 다. 단독 목록: [amk] 은 'a', 'm' 또는 'k' 와 일치 합 니 다.
[^...]
[] 에 없 는 문자: [^ abc] 는 a, b, c 를 제외 한 문자 와 일치 합 니 다.
re*
0 개 이상 의 표현 식 과 일치 합 니 다.
re+
하나 이상 의 표현 식 과 일치 합 니 다.
re?
앞의 정규 표현 식 에서 정 의 된 0 개 또는 1 개의 세 션 과 일치 합 니 다. 탐욕 이 아 닙 니 다.
re{ n}
 
re{ n,}
n 개의 앞 표현 식 과 정확하게 일치 합 니 다.
re{ n, m}
n 에서 m 까지 앞의 정규 표현 식 에서 정 의 된 세 션, 탐욕 방식 과 일치 합 니 다.
a| b
일치 하 는 a 또는 b
(re)
G 괄호 안에 있 는 표현 식 과 일치 하 며, 그룹 을 나 타 냅 니 다.
(?imx)
정규 표현 식 은 선택 할 수 있 는 세 가지 표 지 를 포함 합 니 다: i, m, 또는 x.괄호 안의 영역 에 만 영향 을 줍 니 다.
(?-imx)
정규 표현 식 은 i, m, x 로 고 를 닫 습 니 다.괄호 안의 영역 에 만 영향 을 줍 니 다.
(?: re)
유사 (...) 하지만 한 그룹 을 표시 하지 않 습 니 다.
(?imx: re)
괄호 안에 i, m 또는 x 선택 표 지 를 사용 합 니 다.
(?-imx: re)
괄호 안에 i, m, x 로 고 를 사용 하지 않 습 니 다.
(?#...)
주석
(?= re)
전방 향 긍정 정의 부.정규 표현 식 이 포함 되 어 있 으 면 현재 위치 가 성공 적 으로 일치 할 때 성공 하고 그렇지 않 으 면 실패 합 니 다.그러나 표현 식 이 시도 되 었 을 때 일치 하 는 엔진 이 전혀 향상 되 지 않 았 습 니 다.모드 의 나머지 부분 은 정의 문자 의 오른쪽 을 시도 해 야 합 니 다.
(?! re)
전방 부정 정의 부.긍정 적 인 정의 와 반대;함 유 된 표현 식 이 문자열 의 현재 위치 와 일치 하지 않 을 때 성공 합 니 다.
(?> re)
일치 하 는 독립 모델 로 거 슬러 올 라 가지 않 습 니 다.
\w
일치 하 는 알파벳 숫자
\W
일치 하 는 비 자모 숫자
\s
임의의 공백 문자 와 일치 합 니 다. [\ t \ r \ f] 와 같 습 니 다.
\S
임의의 비어 있 지 않 은 문자 일치
\d
임의의 숫자 와 일치 하 며, 등가 는 [0 - 9] 이다.
\D
임의의 비 숫자 일치
\A
일치 하 는 문자열 시작
\Z
일치 하 는 문자열 이 끝 났 습 니 다. 줄 이 바 뀌 기 전의 끝 문자열 만 일치 합 니 다.c
\z
일치 문자열 끝
\G
마지막 으로 완 성 된 위치 와 일치 합 니 다.
\b
단어 경계 와 일치 합 니 다. 즉, 단어 와 빈 칸 사이 의 위 치 를 말 합 니 다.예 를 들 어 'er \ b' 는 'never' 의 'er' 와 일치 할 수 있 지만 'verb' 의 'er' 와 일치 할 수 없습니다.
\B
단어 가 아 닌 경계 와 일치 합 니 다.r \ B '는' verb '의' er '와 일치 하지만' never '의' er '와 일치 할 수 없습니다.
, \ t, 등.
줄 바 꿈 문자 와 일치 합 니 다.탭 문자 와 일치 합 니 다.기다리다
\1...\9
n 번 째 그룹의 하위 표현 식 과 일치 합 니 다.
\10
n 번 째 그룹의 하위 표현 식 과 일치 합 니 다. 일치 하면.그렇지 않 으 면 8 진 문자 코드 의 표현 식 을 말 합 니 다.
 
 
 
정규 표현 식 상용 5 가지 조작
 
re.match(pattern, string)     # 처음부터 일치
 
re.search(pattern, string)    # 일치 하 는 문자열 을 찾 을 때 까지 전체 문자열 과 일치 합 니 다.
 
re. split () \ # 일치 하 는 형식 을 분할 점 으로 문자열 을 목록 으로 나 눕 니 다.
re. findall () \ # 일치 하 는 모든 문 자 를 찾 아 목록 형식 을 되 돌려 줍 니 다.
re.sub(pattern, repl, string, count,flag)
 
 
정규 표현 식 인 스 턴 스
 
문자 일치
 
실례
묘사 하 다.
python
"python" 과 일치 합 니 다.
 
문자 클래스
 
실례
묘사 하 다.
[Pp]ython
"Python" 또는 "python" 과 일치 합 니 다.
rub[ye]
"ruby" 또는 "rube" 와 일치 합 니 다.
[aeiou]
괄호 안에 있 는 임의의 자모 와 일치 합 니 다.
[0-9]
모든 숫자 와 일치 합 니 다.비슷 하 다
[a-z]
소문 자 일치
[A-Z]
모든 대문자 일치
[a-zA-Z0-9]
모든 자모 와 숫자 와 일치 합 니 다.
[^aeiou]
aeiou 알파벳 을 제외 한 모든 문자
[^0-9]
숫자 를 제외 한 문자 와 일치 합 니 다.
 
특수 문자 클래스
실례
묘사 하 다.
.
"" 를 제외 한 모든 문자 와 일치 합 니 다.'' 를 포함 한 모든 문자 와 일치 하려 면 '[.]' 와 같은 모드 를 사용 하 십시오.
\d
숫자 문자 와 일치 합 니 다.등가
\D
비 숫자 문자 와 일치 합 니 다.등가
\s
빈 칸, 탭 문자, 페이지 바 꾸 기 등 모든 공백 문자 와 일치 합 니 다.등가
\S
공백 문자 가 아 닌 문자 와 일치 합 니 다.등가
\w
밑줄 친 단 어 를 포함 하 는 모든 문자 와 일치 합 니 다.'[A - Za - z0 - 9]' 와 같다.
\W
단어 가 아 닌 문자 와 일치 합 니 다.'[^ A - Za - z0 - 9]' 와 같 습 니 다.
 
 
 
 
 
re. match 와 re. search 의 차이
 
re. match 는 문자열 의 시작 만 일치 합 니 다. 문자열 이 정규 표현 식 에 맞지 않 으 면 일치 하지 않 습 니 다. 함수 가 None 로 돌아 갑 니 다.일치 하 는 문자열 을 찾 을 때 까지 re. search 는 전체 문자열 과 일치 합 니 다.
 
일치 하 는 인 스 턴 스:
핸드폰 번호 일치
 
phone_str = "hey my name is alex, and my phone number is 13651054607, please call me if you are pretty!"
phone_str2 = "hey my name is alex, and my phone number is 18651054604, please call me if you are pretty!"
 
m = re.search("(1)([358]\d{9})",phone_str2)
if m:
    print(m.group())

 
일치 하 는 IP V4
ip_addr = "inet 192.168.60.223 netmask 0xffffff00 broadcast 192.168.60.255"
 
m = re.search("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", ip_addr)
 
print(m.group())

그룹 일치 주소
contactInfo = 'Oldboy School, Beijing Changping Shahe: 010-8343245'
match = re.search(r'(\w+), (\w+): (\S+)', contactInfo) #  
"""
>>> match.group(1)
  'Doe'
  >>> match.group(2)
  'John'
  >>> match.group(3)
  '555-1212'
"""
match = re.search(r'(?P<last>\w+), (?P<first>\w+): (?P<phone>\S+)', contactInfo)
"""
 >>> match.group('last')
  'Doe'
  >>> match.group('first')
  'John'
  >>> match.group('phone')
  '555-1212'
"""

일치 하 는 전자 메 일
email = "[email protected]   http://www.oldboyedu.com"
 
m = re.search(r"[0-9.a-z]{0,26}@[0-9.a-z]{0,20}.[0-9a-z]{0,8}", email)
print(m.group()

 
파일 작업 은 일치 하 는 빠 른 검색 을 통 해 수정 되 었 습 니 다.
fp = open('test.txt','r')
fp1 = open('test1.txt','r')
for line in f:
    if line.startswith in ("json"):
        line1 = line.replace('json','JSON')
        f1.write(line1)
    else:
        f1.write(line)
f.close()
f1.close()    

 
 
 

좋은 웹페이지 즐겨찾기