>  기사  >  백엔드 개발  >  Python의 정규식에 대한 자세한 소개

Python의 정규식에 대한 자세한 소개

不言
不言앞으로
2018-10-18 17:15:232595검색

이 기사는 Python의 정규식에 대한 자세한 소개를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.

Regular

re = 정규 표현식
re 모듈을 사용하면 Python 언어가 모든 정규 표현식 기능을 가질 수 있습니다.
compile 함수는 패턴 문자열과 선택적 플래그 인수를 기반으로 정규식 개체를 생성합니다. 이 객체에는 정규식 일치 및 교체를 위한 일련의 메서드가 있습니다.

기능: 문자열을 처리할 때 문자열의 내용이 작성한 정규식과 일치하는지 확인합니다.

일치하면 일치하는 내용을 제거하고,
일치하지 않으면 일치하지 않는 내용을 무시합니다.

쓰기 정규식 규칙

정규식과 일치하는 패턴
일치할 문자열

세 가지 검색 방법

1). findall
import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'
pattern_2 = r'sheen'
print(re.findall(pattern_1,str))    #['hello', 'hello']
print(re.findall(pattern_2,str))    #['sheen']
2).match

match는 문자열의 시작 위치부터 일치를 시도하고,

  • 시작 위치가 성공적으로 일치하지 않으면 , None을 반환합니다.

  • 시작 위치가 성공적으로 일치하면 개체를 반환합니다.

import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'
pattern_2 = r'sheen'
print(re.match(pattern_1,str))           #<_sre.sre_match>
print(re.match(pattern_1,str).group())   #返回match匹配的字符串内容,hello
print(re.match(pattern_2,str))           #None</_sre.sre_match>
3).search

search는 전체 문자열을 스캔하고 성공적으로 일치하는 첫 번째 콘텐츠만 반환합니다.

  • 찾을 수 있으면 반환합니다. 객체를 생성하고 그룹 메소드를 통해 해당 문자열을 얻습니다.

import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'
pattern_2 = r'sheen'
print(re.search(pattern_1,str))             #<_sre.sre_match>
print(re.search(pattern_1,str).group())     #hello
print(re.search(pattern_2,str))             #<_sre.sre_match>
print(re.search(pattern_2,str).group())     #sheen</_sre.sre_match></_sre.sre_match>

특수 문자 클래스

.: n을 제외한 모든 문자와 일치합니다. [.n]
d: 숫자--(숫자), 숫자와 일치합니다. , [0-9]
D와 동일: 숫자가 아닌 문자와 일치, [^0-9]
s와 동일: 공백(일반화된 공백: 공백, t, n, r), 단일 공백 ​​문자와 일치
S: 단일 공백 ​​문자를 제외한 모든 공백 문자와 일치합니다.
w: 영숫자 또는 밑줄, [a-zA-Z0-9_]
W: 영숫자 또는 밑줄 제외, [^a-zA-Z0 -9_]

import re

# .
print(re.findall(r'.','sheen\nstar\n'))     #['s', 'h', 'e', 'e', 'n', 's', 't', 'a', 'r']

#\d#\D
print(re.findall(r'\d','当前声望30'))       #['3', '0']
print(re.findall(r'\D','当前声望30'))       #['当', '前', '声', '望']

#\s#\S
print(re.findall(r'\s', '\n当前\r声望\t为30'))     #['\n', '\r', '\t']
print(re.findall(r'\S', '\n当前\r声望\t为30'))     #['当', '前', '声', '望', '为', '3', '0']

#\w#\W
print(re.findall(r'\w','lucky超可爱!!'))           #['l', 'u', 'c', 'k', 'y', '超', '可', '爱']
print(re.findall(r'\W','lucky超可爱!!'))           #['!', '!']

Python의 정규식에 대한 자세한 소개

문자 발생 횟수 지정

일치하는 문자 발생 횟수:

*: 0번 또는 무한 번 나타나는 이전 문자를 나타냅니다. d*, .*
+: 이전 문자를 나타냅니다. 문자가 한 번 또는 무한히 나타남; d+
?: 이전 문자가 1번 또는 0번 나타남을 의미합니다. 일부 문자를 생략할 수 있다고 가정하면 두 번째 방법을 생략하지 않을 때

를 사용할 수도 있습니다.

{m}: before 문자가 m번 나타납니다.
{m,}: 이전 문자가 m번 이상 나타납니다. * == {0,} + ==={1,}
{m,n}: 이전 문자가 m번 나타납니다. ? === {0,1}

import re

#* 代表前一个字符出现0次或者无限次
print(re.findall(r's*','sheenstar'))        #['s', '', '', '', '', 's', '', '', '', '']
print(re.findall(r's*','hello'))            #['', '', '', '', '', '']

#+ 代表前一个字符出现一次或者无限次
print(re.findall(r's+','sheenstar'))        #['s', 's']
print(re.findall(r's+','hello'))            #[]

# ? 代表前一个字符出现1次或者0次
print(re.findall(r'188-?', '188 6543'))     #['188']
print(re.findall(r'188-?', '188-6543'))     #['188-']
print(re.findall(r'188-?', '148-6543'))     #[]


# 匹配电话号码
pattern = r'\d{3}[\s-]?\d{4}[\s-]?\d{4}'
print(re.findall(pattern,'188 0123 4567'))      #['188 0123 4567']
print(re.findall(pattern,'188-0123-4567'))      #['188-0123-4567']
print(re.findall(pattern,'18801234567'))        #['188-0123-4567']

연습--IP 일치

인터넷에서 정규식 생성기를 검색하고, 다른 사람이 작성한 규칙을 사용하고, 직접 테스트할 수 있습니다.

import re

# | 表示或者
pattern = r'(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$'

print(re.findall(pattern,'172.25.254.34'))  #[('172', '25', '254', '34')]

matchObj_1 = re.match(pattern,'172.25.254.34')
if matchObj_1:
    print('匹配项:',matchObj_1.group())                     #172.25.254.34
else:
    print('未找到匹配项')

matchObj_2 = re.match(pattern,'172.25.254.343')
if matchObj_2:
    print('匹配项:',matchObj_2.group())                     
else:
    print('未找到匹配项')

Python의 정규식에 대한 자세한 소개

위 내용은 Python의 정규식에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제