[Python 학습 노트] 정규 표현 식 요약
줄 임 말 문자 분류
속뜻
\d
0 - 9 의 임 의 숫자
\D
0 - 9 의 숫자 를 제외 한 모든 문자
\w
모든 자모, 숫자 또는 밑줄 문자 ('단어' 문자 와 일치 하 는 것 으로 볼 수 있 습 니 다)
\W
알파벳, 숫자, 밑줄 을 제외 한 모든 문자
\s
빈 칸, 탭 문자 또는 줄 바 꿈 문자 ('공백' 문자 와 일치 하 는 것 으로 볼 수 있 습 니 다)
\S
빈 칸, 탭 문자, 줄 바 꿈 문 자 를 제외 한 모든 문자
?
물음 표 는 그룹 을 나 눈 뒤에 바짝 붙 어서 앞의 그룹의 내용 이 있 으 나 마 나 함 을 나타 낸다
*
별 표 는 그룹 을 나 눈 후 앞의 그룹 내용 이 0 회 또는 여러 번 일치 하 는 것 을 나타 낸다.
+
더하기 번 호 는 그룹 을 나 눈 후 앞 에 그룹 을 나 누 는 내용 과 최소 1 번 일치 합 니 다.
|
파이프 매 칭 여러 그룹
{}
괄호 안에 숫자 를 넣 으 면 특정한 글자 수 와 일치 함 을 나타 낸다.
.
문장 은 모든 문자 와 일치 합 니 다 (줄 바 꾸 기 제외)
Python 에서 정규 표현 식 을 사용 하 는 절차
Python 에서 정규 표현 식 을 사용 하 는 데 는 다음 과 같은 몇 가지 절차 가 있 습 니 다.
import re
로 가 져 옵 니 다.re.compile()
또는 search()
방법 으로 대상 문자열 을 입력 합 니 다.findall()
방법 을 호출 하여 실제 텍스트 와 일치 하 는 문자열 을 되 돌려 줍 니 다.Python 정규 표현 식 상세 설명
문자열 의 첫 번 째 따옴표 전에 r 를 추가 하여
group()
에 원본 문자열 을 전달 합 니 다.Python 에서 전의 문 자 는 역 슬 래 쉬 "\" 를 사용 합 니 다.만약 우리 가 "" 를 출력 해 야 한다 면, 전의 문 자 를 입력 해 야 역 슬 래 쉬 를 출력 할 수 있 습 니 다.그래서 "\" 는 역 슬 래 쉬 에 소문 자 n 을 표시 합 니 다.단, 문자열 의 첫 번 째 따옴표 앞 에 r 를 추가 하면 이 문자열 을 원본 문자열 로 표시 할 수 있 습 니 다. 전의 문 자 는 포함 되 지 않 습 니 다.
괄호 로 묶 기
만약 우리 가 아래 텍스트 의 전화 번 호 를 일치 시 키 고 지역 번 호 를 분리 하려 고 한다 면.정규 표현 식 에 괄호 를 추가 하여 '그룹' 을 만 들 수 있 습 니 다.
re.compile()
그리고 (\d\d\d)-(\d\d\d\d\d\d\d\d)
대상 과 일치 하 는 방법 을 사용 하여 두 번 째 그룹 에서 필요 한 텍스트 를 가 져 옵 니 다.정규 표현 식 문자열 의 첫 번 째 괄호 는 첫 번 째 그룹 이 고 두 번 째 괄호 는 두 번 째 그룹 입 니 다.group()
일치 하 는 대상 방법 에 정수 1 또는 2 를 입력 하면 일치 하 는 텍스트 의 다른 부분 을 얻 을 수 있 습 니 다.group()
방법 에 0 또는 파 라 메 터 를 전송 하지 않 으 면 일치 하 는 텍스트 전 체 를 되 돌려 줍 니 다. group()
방법 은 한 번 에 모든 그룹 을 가 져 올 수 있 습 니 다.(groups () 와 group (0) 의 차이 에 주의 하 십시오) 예 를 들 어:>>> import re
>>> phoneNumRegex = re.compile(r"(\d\d\d)-(\d\d\d\d\d\d\d\d)")
>>> mo = phoneNumRegex.search("My number is 029-88888888. ")
>>> mo.group(1)
'029'
>>> mo.group(2)
'88888888'
>>> mo.group(0)
'029-88888888'
>>> mo.group()
'029-88888888'
>>> mo.groups()
('029', '88888888')
파이프 로 여러 그룹 매 칭
문자 "|" 를 "파이프" 라 고 합 니 다.여러 표현 식 중 하나 와 일치 하 기 를 원할 때 사용 할 수 있 습 니 다.예 를 들 어 정규 표현 식
groups()
은 'Kitty' 나 'Tiny' 와 일치 합 니 다.둘 다 텍스트 에 있 으 면 첫 번 째 로 나타 나 는 것 은 Match 대상 으로 되 돌아 갑 니 다.예 를 들 면:>>> nameRegex = re.compile(r"Kitty|Tiny")
>>> mo1 = nameRegex.search("Tiny and Rose and Kitty. ")
>>> mo1.group()
'Tiny'
만약 우리 가 Batman, Batwoman, Batcar, Batmobile 중의 어느 하나 와 일치 하 기 를 원한 다 면, 이 단어 들 은 모두 Bat 로 시작 되 기 때문에 접두사 한 번 만 지정 하면 매우 편리 할 것 이다.예 를 들 면:
>>> nameRegex_2 = re.compile(r"Bat(man|woman|car|mobile)")
>>> mo2 = nameRegex_2.search("Batt、Batmobile、Batwoman、Batcar、Batman")
>>> mo2.group()
'Batmobile'
>>> mo2.group(1)
'mobile'
물음 표 는 그룹 을 나 눈 뒤에 바짝 붙 어서 앞의 그룹의 내용 이 있 으 나 마 나 함 을 나타 낸다
예 를 들 어 전화번호 와 일치 하 는 예 에서 지역 번호 가 없 는 전화 번 호 를 만나면 앞의 예 에서 코드 가 일치 하지 않 습 니 다. 우 리 는 그룹 을 나 눈 후에 물음 표를 붙 여 해결 할 수 있 습 니 다.예 를 들 면:
>>> phoneNumRegex_2 = re.compile(r"(\d\d\d-)?(\d\d\d\d\d\d\d\d)")
>>> mo = phoneNumRegex_2.search("My phone number is 12356897. ")
>>> mo.group()
'12356897'
별 표 는 그룹 을 나 눈 후 앞의 그룹 내용 이 0 회 또는 여러 번 일치 하 는 것 을 나타 낸다.
간단 하 다
>>> emRegex = re.compile(r"e(m)*")
>>> mo = emRegex.search("emmmmmmmmmmm fuck trump. ")
>>> mo.group()
'emmmmmmmmmmm'
더하기 번 호 는 그룹 을 나 눈 후 앞 에 그룹 을 나 누 는 내용 과 최소 1 번 일치 합 니 다.
간단 하 다
>>> emRegex = re.compile(r"e(m)+")
>>> mo = emRegex.search("e fuck trump. ")
>>> mo.group()
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'NoneType' object has no attribute 'group' #
>>> mo = emRegex.search("em fuck trump. ")
>>> mo.group()
'em'
괄호 로 특정 횟수 를 매 칭 하 다
그룹 을 나 누 어 특정 횟수 를 반복 하 는 텍스트 를 찾 으 려 면 이 그룹 뒤에 괄호 를 붙 이 고 그 숫자 는 중복 되 는 횟수 를 표시 합 니 다.예 를 들 어 (ha) {3} 문자열 "hahaha", (ha) {1, 3} 문자열 "ha", "haha" 또는 "hahaha" 와 일치 합 니 다.이 괄호 안의 규칙 은 배열 절편 의 규칙 과 같 습 니 다. 예 를 들 어 {3,} 은 3 회 이상 인 스 턴 스 와 일치 합 니 다.{, 5} 은 0 에서 5 번 의 인 스 턴 스 와 일치 합 니 다.예 를 들 면:
>>> haRegex = re.compile(r"(ha){1,}")
>>> mo = haRegex.search("hahahahahahahahahahah. ")
>>> mo.group()
'hahahahahahahahahaha'
줄 바 꿈 자 를 제외 한 임의의 여러 문 자 를
r"Kitty|Tiny"
로 일치 시 킵 니 다.. 임의의 문자 (줄 바 꾸 기 제외) 와 일치 할 수 있 습 니 다. * 이전 그룹 에서 0 이상 반복 하 는 횟수 를 표시 합 니 다.
.*
조합 은 임의의 문자열 (줄 바 꿈 제외) 과 일치 할 수 있 습 니 다.욕심 과 비 욕심 이 일치 하 다.
앞의 예 에서
.*
1 개 또는 다른 수량 ha 와 일치 할 수 있 지만 왜 가장 긴 것 으로 되 돌아 갑 니까?이것 은 Python 의 정규 표현 식 이 기본적으로 욕심 이 많 기 때 문 입 니 다. 이것 은 두 가지 의미 가 있 는 상황 에서 가장 긴 문자열 과 일치 한 다 는 것 을 의미 합 니 다.그 를 가장 짧 은 것 으로 돌려 보 내 려 면 욕심 이 없 는 것 이 되 려 면 괄호 뒤에 물음 표를 붙 여야 한다. 여기 서 는 앞에서 조 를 나 눈 후에 물음 표를 붙 이 는 것 이 있어 도 되 고 없어 도 된다 는 뜻 을 나타 내 는 것 을 주의해 야 한다.예 를 들 면:>>> haRegex = re.compile(r"(ha){1,}?")
>>> mo = haRegex.search("hahahahahahahahahahah. ")
>>> mo.group()
'ha'
(ha){1,}
방법 은 첫 번 째 일치 하 는 대상 을 되 돌려 주 고 search()
방법 은 일치 하 는 모든 문자열 을 되 돌려 줍 니 다.findall()
방법 은 Match 대상 을 되 돌려 줍 니 다. 이 대상 은 search()
방법 을 가지 고 있 습 니 다.group()
방법 은 목록 을 직접 되 돌려 주 고 목록 은 findall()
방법 이 없다.다음 과 같다.>>> import re
>>> phoneNumRegex = re.compile(r"(\d\d\d-)?(\d\d\d\d\d\d\d\d)")
>>> mo = phoneNumRegex.search("Home: 029-88618871, Office: 010-36758954. ")
>>> mo
<_sre.sre_match object="" span="(6," match="029-88618871">
>>> mo.group()
'029-88618871'
>>> mo_2 = phoneNumRegex.findall("Home: 029-88618871, Office: 010-36758954. ")
>>> mo_2
[('029-', '88618871'), ('010-', '36758954')]
>>> mo_2.group()
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'list' object has no attribute 'group'
요약:
group()
방법 \d\d\d-\d\d\d\d\d\d\d\d
은 일치 하 는 문자열 의 목록 을 되 돌려 줍 니 다. 예 를 들 어 [029 - 88618871 ',' 010 - 36758954 '];findall()
방법 (\d\d\d-)?(\d\d\d\d\d\d\d\d)
은 문자열 의 원 그룹의 목록 을 되 돌려 줍 니 다. 각 그룹 은 원 그룹의 문자열 에 대응 합 니 다. 예 를 들 어 [('029 -' 88618871 '), (' 010 - ',' 36758954 ')].문자 분류 만 들 기
일치 하고 싶 은 문 자 는 위의 줄 임 말
findall()
등에 서 너무 광범 위 하 다 고 생각 되면 괄호 로 자신의 문자 분 류 를 정의 할 수 있 습 니 다.예 를 들 어 [abcdeABCDE] 나 [a - ea - E] 는 'abcdeABCDE' 의 임의의 문자 와 일치 합 니 다.주의해 야 할 것 은 괄호 안에 있 는 일반적인 정규 표현 식 기호 가 해석 되 지 않 는 다 는 것 이다. 이것 은 "." 와 일치 할 때 "\." 등 을 입력 하지 않 아 도 된다 는 것 을 의미한다.왼쪽 괄호 뒤에 ^ 문 자 를 바짝 따 르 면 '비 문자 류' 를 얻 을 수 있 습 니 다.[^ a - eA - E] 와 같이 "abcdeABCDE" 를 제외 한 모든 문 자 를 한 번 에 일치 합 니 다.
문자 와 달러 문자 삽입
정규 표현 식 의 시작 부분 에 삽입 기호 (^) 를 사용 하면 일치 하 는 텍스트 를 찾기 시작 할 때 발생 해 야 한 다 는 것 을 나타 낸다.유사 한 것 은 정규 표현 식 의 끝 에 달러 기호 ($) 를 붙 여 이 문자열 이 정규 표현 식 으로 끝나 야 일치 할 수 있 음 을 나타 낸다.양 자 는 동시에 사용 할 수 있다.예 를 들 면:
helloRegex = re.compile(r"^hello")
>>> mo = helloRegex.search("oh, hello!")
>>> mo_2 = helloRegex.search("hello, Kitty.")
>>> mo == None
True
>>> mo_2
<_sre.sre_match object="" span="(0," match="hello"/>
문자열 바 꾸 기
\s\d\w
방법 사용 하기정규 표현 식 은 문자열 을 찾 을 수 있 을 뿐만 아니 라 찾 은 문자열 을 대체 할 수 있 습 니 다. Regex 대상
sub()
방법 은 두 문자열 인 자 를 입력 해 야 합 니 다.첫 번 째 매개 변 수 는 찾 은 문자열 을 대체 하 는 데 사 용 됩 니 다. 두 번 째 매개 변 수 는 찾 을 문자열 입 니 다.예 를 들 면:>>> findXiamenRegex = re.compile(r"Xiamen")
>>> findXiamenRegex.sub("Xi'an", "Xiamen is the capital of Shaanxi.")
"Xi'an is the capital of Shaanxi."
입력
sub()
, re.IGNORECASE
, re.DOTALL
을 통 해 대소 문자, 일치 하 는 줄 바 꿈 문자, 다 중 줄 입력 정규 표현 식 을 무시 합 니 다.re.VERBOSE
에 re. IGNORECASE 나 re. I 인 자 를 입력 하면 일치 할 때 대소 문 자 를 무시 할 수 있 습 니 다.re. DOTALL 인 자 를 입력 하여 문장 이 줄 바 꿈 문자 와 일치 하도록 합 니 다.복잡 한 정규 표현 식 의 다 중 줄 입력 을 위해 re. VERBOSE 로 전 송 됩 니 다.re.compile()
여러 개 이상 의 3 개의 매개 변 수 를 동시에 입력 하 는 것 을 지원 하지 않 습 니 다. 우 리 는 파이프 기호 '|' 을 사용 하여 여러 개의 매개 변 수 를 전송 할 수 있 습 니 다.예 를 들 어 re.compile()
.작은 항목: 클립보드 에 있 는 핸드폰 번호, 전화 번호, 메 일 주 소 를 추출 하고 규범 화 된 형식 으로 바 꾸 어 클립보드 에 다시 쓰기 (다 하면 다 알 수 있 습 니 다)
이 항목 은 다음 과 같은 몇 단계 로 나 눌 수 있다.
먼저 우 리 는 인터넷 검색 을 통 해 국내 전화 번호 의 지역 번호 가 3 - 4 자리 이 고 모두 0 으로 시작 한 다 는 것 을 알 게 되 었 다.국내 휴대 전화 번 호 는 모두 1 로 시작 해 86 이나 + 86 접두사 가 들 어 있 을 수도 있다.
코드 는 다음 과 같 습 니 다:
#! python3
# phoneAndEmail.py - Finds phone numbers and email addresses on the clipboard.
import pyperclip
import re
# create phone number regex
phone1_Regex = re.compile(r'''(
(\+)?
(86)?
(1\d{2})
(-|\s)?
(\d{8})
(\D)
)''', re.VERBOSE)
phone2_Regex = re.compile(r'''(
(0\d{2,3})?
[-]?
(\d{8})
(\-\d{1,4})?
)''', re.VERBOSE)
# create email regex
emailRegex = re.compile(r'''(
[a-zA-Z0-9._%+-]+
@
[a-zA-Z0-9.-]+
)''', re.VERBOSE)
# Find matches in clipboard text.
text = str(pyperclip.paste())
matches = []
for groups in phone1_Regex.findall(text):
phoneNum = groups[3] + groups[5]
matches.append(phoneNum)
for groups in phone2_Regex.findall(text):
phoneNum = groups[1] + groups[2]
if groups[3] is not None:
phoneNum += groups[3]
matches.append(phoneNum)
for groups in emailRegex.findall(text):
matches.append(str(groups))
# Copy results to the clipboard.
if len(matches) > 0:
pyperclip.copy("
".join(matches))
print("Copied to clipboard: ")
print("
".join(matches))
else:
print("No phone numbers or email address found. ")
핸드폰 번호 와 이메일 주소 가 들 어 있 는 텍스트 를 복사 해서 프로그램 을 실행 해 보 세 요.
더 많은 Python 정규 표현 식
더 많은 Python 정규 표현 식 내용: 공식 문서
[Python 학습 노트] 시 리 즈 는 제 가 라 는 책 을 배 울 때 배 운 노트 입 니 다.자신 이 개념 과 코드 를 다시 한 번 두 드 려 서 자신의 기억 과 나중에 찾 아 볼 수 있 도록 한다.만약 당신 에 게 도움 이 된다 면 더욱 좋 을 것 입 니 다!
다음으로 전송:https://www.cnblogs.com/dereen/p/python_regex.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.