s = 'i love python very much'
pat = 'python'
r = re.search(pat,s)
print(r.span()) #(7,13)
s = '山东省潍坊市青州第1中学高三1班'
pat = '1'
r = re.finditer(pat,s)
for i in r:
print(i)
# <re.Match object; span=(9, 10), match='1'>
# <re.Match object; span=(14, 15), match='1'>
s = '一共20行代码运行时间13.59s'
pat = r'\d+\.?\d+' # ?表示匹配小数点(\.)0次或1次
r = re.findall(pat,s)
print(r)
# ['20', '13.59']
s = 'This module provides regular expression matching operations similar to
those found in Perl'
pat = r'\s+'
r = re.split(pat,s)
res = [i for i in r if re.match(r'[mMtT]',i)]
print(res) # ['This', 'module', 'matching', 'to', 'those']
content='<h>ddedadsad</h><div>graph</div>bb<div>math</div>cc'
pat=re.compile(r"<div>(.*)</div>") #贪婪模式
m=pat.findall(content)
print(m) # ['graph</div>bb<div>math']
content='<h>ddedadsad</h><div>graph</div>bb<div>math</div>cc'
pat=re.compile(r"<div>(.*?)</div>") #非贪婪模式
m=pat.findall(content)
print(m) # ['graph', 'math']
content = 'graph math,,english;chemistry' # 这种
pat=re.compile(r"[\s\,\;]+") #贪婪模式
m=pat.split(content)
print(m) # ['graph', 'math', 'english', 'chemistry']
sub 替换
content="hello 12345, hello 456321"
pat=re.compile(r'\d+') #要替换的部分
m=pat.sub("666",content)
print(m) # hello 666, hello 666
. 匹配任意字符
^ 匹配字符串始位置
$ 匹配字符串中结束的位置
* 前面的原子重复0次1次多次
? 前面的原子重复一次或者0次
+ 前面的原子重复一次或多次
{n} 前面的原子出现了 n 次
{n,} 前面的原子至少出现 n 次
{n,m} 前面的原子出现次数介于 n-m 之间
( ) 分组,需要输出的部分
\s 匹配空白字符
\w 匹配任意字母/数字/下划线
\W 和小写 w 相反,匹配任意字母/数字/下划线以外的字符
\d 匹配十进制数字
\D 匹配除了十进制数以外的值
[0-9] 匹配一个0-9之间的数字
[a-z] 匹配小写英文字母
[A-Z] 匹配大写英文字母
def snow(snow_count):
p.hideturtle()
p.speed(500)
p.pensize(2)
for i in range(snow_count):
r = random.random()
g = random.random()b = random.random()
p.pencolor(r, g, b)
p.pu()
p.goto(random.randint(-350, 350), random.randint(1, 270))
p.pd()
dens = random.randint(8, 12)
snowsize = random.randint(10, 14)
for _ in range(dens):
p.forward(snowsize) # 向当前画笔方向移动snowsize像素长度
p.backward(snowsize) # 向当前画笔相反方向移动snowsize像素长度
p.right(360 / dens) # 顺时针移动360 / dens度
正则表达式
\A 匹配字符串开头
\Z 匹配字符串结尾,若存在换行,只匹配到换行前的结束字符串
\z 匹配字符串结尾,若存在换行,同时还会匹配换行符
^ 匹配开头 $ 匹配结尾
. 匹配除换行符之外的字符
[^...] 不在[]的字符,[^abc] 除了a,b,c之外的字符
? 匹配0个或1个字符,非贪婪匹配
{n} 精确匹配n个前面的字符
{n,m} 匹配n到m次字符片段,贪婪匹配
1.match() 该方法默认从字符串起始位置匹配,匹配返回结果,否则None
pattern='^hello.*world$' # 注意: 以hello开头,以world结尾
贪婪匹配
content = 'Hello 1234567 World'
result=re.match('^Hello.*(\d+).*World$')
print(result.group(1)) # 结果 7
# 当前贪婪匹配是的.*匹配尽可能多的数字,以至于\d+匹配到一个数字7
非贪婪匹配
result=re.match('^Hello.*?(\d+).*World$')
print(result.group(1)) # 结果 1234567
# 当前贪婪匹配是的.*?0匹配尽可能少的数字,以至于\d+匹配到数字1234567
修饰符:
re.I 忽略大小写
re.M 多行匹配,常依赖于^和$
re.S 使.匹配包括换行在内的所有字符
2.search() 扫描整个字符串
3.findall() 返回所有内容
4.sub() 可简化replace的操作
re.sub('pattern','','context') # 参数一:匹配字符;参数二:替换字符;参数三:原字符串
# 将匹配到的字符串替换为空
5) compile() 正则匹配到的字符编译成字符对象
context='2024-12-01 12:00'
pattern=re.compile('\d{2}:\d{2}')
result=re.sub(pattern,'',context)
摘抄之python书籍