正則匹配分組


字符 功能
| 匹配左右任意一個表達式
(ab) 將括號中字符作為一個分組
\num 引用分組num匹配到的字符串
(?P<name>) 分組起別名
(?P=name) 引用別名為name分組匹配到的字符串

示例1:|

需求:匹配出0-100之間的數字

#coding=utf-8 import re ret = re.match("[1-9]?\d","8") print(ret.group()) # 8 ret = re.match("[1-9]?\d","78") print(ret.group()) # 78 # 不正確的情況 ret = re.match("[1-9]?\d","08") print(ret.group()) # 0 # 修正之后的 ret = re.match("[1-9]?\d$","08") if ret: print(ret.group()) else: print("不在0-100之間") # 添加| ret = re.match("[1-9]?\d$|100","8") print(ret.group()) # 8 ret = re.match("[1-9]?\d$|100","78") print(ret.group()) # 78 ret = re.match("[1-9]?\d$|100","08") # print(ret.group()) # 不是0-100之間 ret = re.match("[1-9]?\d$|100","100") print(ret.group()) # 100 

示例2:( )

需求:匹配出163、126、qq郵箱

#coding=utf-8 import re ret = re.match("\w{4,20}@163\.com", "test@163.com") print(ret.group()) # test@163.com ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@126.com") print(ret.group()) # test@126.com ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@qq.com") print(ret.group()) # test@qq.com ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@gmail.com") if ret: print(ret.group()) else: print("不是163、126、qq郵箱") # 不是163、126、qq郵箱 

不是以4、7結尾的手機號碼(11位)

import re tels = ["13100001234", "18912344321", "10086", "18800007777"] for tel in tels: ret = re.match("1\d{9}[0-35-68-9]", tel) if ret: print(ret.group()) else: print("%s 不是想要的手機號" % tel) 

提取區號和電話號碼

>>> ret = re.match("([^-]*)-(\d+)","010-12345678") >>> ret.group() '010-12345678' >>> ret.group(1) '010' >>> ret.group(2) '12345678' 

示例3:\

需求:匹配出<html>hh</html>

#coding=utf-8 import re # 能夠完成對正確的字符串的匹配 ret = re.match("<[a-zA-Z]*>\w*</[a-zA-Z]*>", "<html>hh</html>") print(ret.group()) # 如果遇到非正常的html格式字符串,匹配出錯 ret = re.match("<[a-zA-Z]*>\w*</[a-zA-Z]*>", "<html>hh</htmlbalabala>") print(ret.group()) # 正確的理解思路:如果在第一對<>中是什么,按理說在后面的那對<>中就應該是什么 # 通過引用分組中匹配到的數據即可,但是要注意是元字符串,即類似 r""這種格式 ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>") print(ret.group()) # 因為2對<>中的數據不一致,所以沒有匹配出來 test_label = "<html>hh</htmlbalabala>" ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", test_label) if ret: print(ret.group()) else: print("%s 這是一對不正確的標簽" % test_label) 

運行結果:

<html>hh</html> <html>hh</htmlbalabala> <html>hh</html> <html>hh</htmlbalabala> 這是一對不正確的標簽 

示例4:\number

需求:匹配出<html><h1>www.itcast.cn</h1></html>

#coding=utf-8 import re labels = ["<html><h1>www.itcast.cn</h1></html>", "<html><h1>www.itcast.cn</h2></html>"] for label in labels: ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", label) if ret: print("%s 是符合要求的標簽" % ret.group()) else: print("%s 不符合要求" % label) 

運行結果:

<html><h1>www.itcast.cn</h1></html> 是符合要求的標簽 <html><h1>www.itcast.cn</h2></html> 不符合要求 

示例5:(?P<name>) (?P=name)

需求:匹配出<html><h1>www.itcast.cn</h1></html>

#coding=utf-8 import re ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>") ret.group() ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h2></html>") ret.group() 

注意:(?P<name>)(?P=name)中的字母p大寫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM