import re
re.search(r"00\d","007") #\d可以匹配数字
re.search(r"\d\d\d","123")
re.search(r"\w\w\d","bs4") #\w可以匹配字母
re.search(r"\w\w.","bs!") #.可以匹配任意字符
re.search(r"\w+","aaaaaaahhhhhhhvvvvvv") #+表示至少匹配一个字符
re.search(r"\w?","aaaaaaahhhhhhhvvvvvv") #?表示匹配0个或者1个字符
re.search(r"\w*","aaaaaaahhhhhhhvvvvvv") #*表示匹配任意个字符(包括0个)
re.search(r"\w{3,5}","aaaaaaahhhhhhhvvvvvv") #{3,5}表示匹配3-5个字符
re.search(r"\w{3}","aaaaaaahhhhhhhvvvvvv") #{3}表示匹配3个字符
re.search(r"\d{3}\s\-\s\d{8}","021 - 12345678") #匹配带有空格的电话号码格式,\s表示匹配空格,\-表示将中间特殊的横杠转义
re.search(r"[0-9a-zA-Z\_]{0,20}\@hotmail\.com|[0-9a-zA-Z\_]{0,20}\@qq\.com","123456@hotmail.com") #匹配hotmail或者QQ的邮箱地址
re.search(r"^\d*\w*","021ABC") #^在\d之前表示匹配的字符串首位必须是数字
re.search(r"\d*\w*$","021ABC") #$在\w*之后表示匹配的字符串末位必须是数字
re.search(r"^\d{3}\-\d{3,8}$","010-12345")
re.match(r"^\d{3}\-\d{3,8}$", "010-12345") #match方法判断是否能匹配成功,如果匹配成功会返回一个match对象,如果没有,则返回none
str = "It is Sunday"
re.match(r"It",str)
re.match(r"is",str)
re.match(r"sunday",str)
re.search(r"sunday",str)
re.search(r"Sunday",str)
#re.match() 从第一个字符开始找, 如果第一个字符就不匹配就返回None, 不继续匹配. 用于判断字符串开头或整个字符串是否匹配,速度快.
#re.search() 会整个字符串查找,直到找到一个匹配。
password = input("Please input your password")
if re.match(r"123",password):
print("Your password is right")
else:
print("Your password is wrong")
re.split(r"[\s\,\;\-\+]","a b c; ;d-7,a,8,d dfghs") #尝试用正则表达式来划分字符串
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345') #()用于分组,当match返回一个对象给m时,可以用group方法提取第0组(整个正则表达式相匹配的字符串)、第1组第2组等表示第1、第2个自串
m.group(0)
m.group(1)
m.group(2)
import datetime as dt
ISOTIMEFORMAT = '%H:%M:%S'
Time = dt.datetime.now().strftime(ISOTIMEFORMAT)
print(Time) #获取系统当前时间
SplitTime = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', Time)
SplitTime.groups() #把系统时间split成小时、分钟、秒
re.match(r'^(\d+)(0*)$', '102300').groups() #\d+贪婪匹配
re.match(r'^(\d+?)(0*)$', '102300').groups() #\d+?非贪婪匹配,特殊字符串后面加?为非贪婪模式
re_telephone = re.compile(r"^(\d{3}-(\d{3,8})$)")
re_telephone.match('010-12345').groups() #先将正则表达式编译后再使用match方法
import re
def is_valid_email(addr):
re_addr = re.compile(r"([a-zA-z]*\d*\.*\-*\_*)\@(\w*)(\.com)")
if re_addr.match(addr) != "":
print("This is a right addr")
else:
print("This is not a right addr")
return True
is_valid_email("bill.gates@microsoft.com") #判断一个邮箱的格式是否正确
import re
def split_email(addr):
while addr:
re_addr = re.compile(r"([a-zA-z]*\d*\.*\-*\_*)\@(\w*)(\.com)")
if re_addr.match(addr) != "":
sp_addr = re.split(r"\@",addr)
print(addr+" ==> "+sp_addr[0])
break
else:
addr = str(print("Please tell me a mail address"))
continue
split_email("tom@voyager.com") #拆分邮箱
import re
content = "It's 12345.pm o'clock, it's time to have a lunch!"
result = re.match(r".*?(\d+).*",content) #这里的第一个.*必须加?启动非贪婪模式,否则贪婪模式会匹配所有的字符串只留下1个数字作为返回结果
if result:
print(result.group(1))
import re
content = '''It's 12345.pm o'clock,
it's time to have a lunch!'''
result = re.match(r".*?(\d+).*",content,flags = re.S) #flags = re.S表示可以换行匹配,flags = re.I表示可以忽略大小
if result:
print(result.group(1))
import re
# 取出html中的歌手名和歌名
html = '''<div id="songs-list">
<h2 class="title">经典老歌</h2>
<p class="introduction">
经典老歌列表
</p>
<ul id="list" class="list-group">
<li data-view="2">一路上有你</li>
<li data-view="7">
<a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
</li>
<li data-view="4" class="active">
<a href="/3.mp3" singer="齐秦">往事随风</a>
</li>
<li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
<li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
<li data-view="5">
<a href="/6.mp3" singer="邓丽君">但愿人长久</a>
</li>
</ul>
</div>'''
result = re.findall('<a.*?singer="(.*?)">(.*?)</a>', html,flags = re.S)
if result:
print(result) #使用findall方法返回的是列表,而且可以找到所有的对应项,用search的话只能匹配首次发现的项,用match的话只要html的首字符不符合就返回none
Python 正则表达式练习
于 2022-11-18 15:03:27 首次发布