#正则表达式
# 一:什么是正则?
# 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。
# 或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,
# 并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
# 二:正则的用法
import re
# print(re.findall(\'\\w9\\w\',\'axsdas9xas,_9xdsas_91\'))
#\\w,字母数字下划线,中间的必须为9
# print(re.findall(\'wangkai\',\'wangkaishige dashuaibi,wangkai111\'))
#匹配关键字
# print(re.findall(\'\\W\',\'wangkais++++=10==100\'))
#\\W,非字母数字下划线,和\\w 相反
# print(re.findall(\'\\s\',\' wangk ai aksds \'))
#匹配空格
# print(re.findall(\'\\S\',\' wangk ai aksds \'))
#匹配非空格
# print(re.findall(\'\\d\',\' 232312 a432i4 a6k65sds \'))
#匹配数字
# print(re.findall(\'\\D\', \'wangk 4556 ai34 aksadsds\' ))
#匹配非数字
# print(re.findall(\'\\n\', \'wangk 4556 ai34 \\n aksadsds\' ))
#匹配换行符
# print(re.findall(\'\\t\', \'wangk 4556 ai34 \\t aksadsds\' ))
#匹配制表符
# print(re.findall(\'^wang\', \'wang 4556 ai34 \\t aksadsds\' ))
#仅匹配字符串的开头
# print(re.findall(\'$wang\', \'wang 4556 ai34 \\t aksadsds\' ))
#仅匹配字符串的开头
# print(re.findall(\'.\', \'wang 4556 ai3\\n aksadsds\' ))
#匹配任意字符,除换行符
# print(re.findall(\'a.g\', \'wang 4556 ai3\\n aksadsds\',re.DOTALL ))
#匹配a和g中含任意字符
# print(re.findall(\'a[n]g\', \'wang 4556 ai3\\n aksadsds\',re.DOTALL ))
#匹配a和g中含n
# print(re.findall(\'a[1-9]g\', \'wang 4556 ai3\\n aksaa9gdsds\',re.DOTALL ))
#匹配a和g中含1-9的数字
# print(re.findall(\'a[^1-9]g\', \'wang 4556 ai3\\n aksaa9gdsds\',re.DOTALL ))
#匹配除了a和g中含1-9的数字
# print(re.findall(\'a[a-zA-Z]g\', \'wang 4556 ai3\\n aksaa9gdsds\',re.DOTALL )) #匹配a和g中大小写字母
# print(re.findall(\'a[=+*/-]g\', \'wang 4556 ai3\\n aksaa-gdsds\',re.DOTALL ))
# print(re.findall(\'a[=+*\\-/]g\', \'wang 4556 ai3\\n aksaa-gdsds\',re.DOTALL ))
#匹配a和g中加减乘除,但是减号要放到两边,或者-号前面加上转义符\\
#重复匹配
# ?: 代表?左边的字符出现0次到一次
# print(re.findall(\'ab?\',\'a ab abb abbb a1bb abbbbbb\'))
#只取a0个b到a1个b
#*: 代表*左边的字符出现0次到无数次
# print(re.findall(\'ab*\',\'a ab abb abbb a1bb abbbbbb\'))
#取a0个b到a无数个b
# +:代表+左边的字符出现1次到无穷次
# print(re.findall(\'ab+\',\'a ab abb abbb a1bb abbbbbb\'))
#取a1个b到a无数个b
#{n,m}:代表{n,m}左边的字符出现n次到m次
# print(re.findall(\'ab{1,3}\',\'a ab abb abbb a1bb abbbbbb\'))
#取a(n个b)到a(m个b)
# print(re.findall(\'ab{1,}\',\'a ab abb abbb a1bb abbbbbb\'))
#取a(n个b)到a(无穷个b)
# print(re.findall(\'ab{0,1}\',\'a ab abb abbb a1bb abbbbbb\'))
#取a(0个b)到a(1个b)
# print(re.findall(\'ab{,}\',\'a ab abb abbb a1bb abbbbbb\'))
#取a(0个b)到a(无穷个b)
#贪婪匹配 .*
# print(re.findall(\'a.*b\',\'a ab abb abbb a1bb abbbbbb\'))
#取a到最远的b的所有值
#非贪婪匹配 .*?
# print(re.findall(\'a.*?b\',\'a ab abb abbb a1bb abbbbbb\'))
#取a到最近的b的所有值
#|:或者
# print(re.findall(\'companies|company\',\'Too many companies have gone bankrupt,c and the next one is my company\'))
#取xx或xxx的所有值
#():分组
# print(re.findall(\'compan(ies|y)\',\'Too many companies have gone bankrupt,c and the next one is my company\'))
#compan依然是判断条件,但是只取括号里面的值,
# print(re.findall(\'compan(?:ies|y)\',\'Too many companies have gone bankrupt,c and the next one is my company\'))
#compan依然是判断条件,但是取所有参与判断的值,
#爬虫应用
# print(re.findall(\'href=\"(.*?)\"\',\'<p>动感视频</p><a href=\"https://www.douniwan.com/1.mp4\">逗你玩呢</a><a href=\"https://www.xxx.com/2.mp4\">葫芦娃</a>\'))
#取最远的值
# print(re.findall(\'href=\"(.*)\"\',\'<p>动感视频</p><a href=\"https://www.douniwan.com/1.mp4\">逗你玩呢</a><a href=\"https://www.xxx.com/2.mp4\">葫芦娃</a>\'))
#取最近的值
# print(re.findall(\'ag\', \'wag aG Ag 4556 ai3\\n aksadsds\',re.I ))
#re.I,匹配大小写
# print(re.findall(\'m\\\\\\\\e\',\'m\\e\'))
#\\的用法
# print(re.findall(r\'m\\\\q\',\'m\\q\'))
#打印出来的结果多一个\\,自动添加转义符
#
# msg=\"\"\"
# my name is egon
# asdfsadfadfsadf egon
# 123123123123123egon
# \"\"\"
# print(re.findall(\'egon$\',msg,re.M)) #my name is egon\\nasdfsadfadfsadf egon\\n123123123123123egon\'
#re.M,取所有行
#re模块其他方法
#res=re.findall(\'(href)=\"(.*?)\"\',\'<p>动感视频</p><a href=\"https://www.douniwan.com/1.mp4\">逗你玩呢</a><a href=\"https://www.xxx.com/2.mp4\">葫芦娃</a>\')
# print(res)
# res=re.search(\'(href)=\"(.*?)\"\',\'<p>动感视频</p><a href=\"https://www.douniwan.com/1.mp4\">逗你玩呢</a><a href=\"https://www.xxx.com/2.mp4\">葫芦娃</a>\')
# print(res) #search只能找第一个
# print(res.group(0)) #0代表所有
# print(res.group(1)) #1代表分组第一个,第一个括号里的内容
# print(res.group(2)) #2代表分组第2个,第二个括号里的内容
# res=re.match(\'abc\',\'123abc\') ## res=re.search(\'^abc\',\'123abc\')
# print(res) #match代表只从开头查找,相当于findall中的(^)
# print(re.findall(\'alex\',\'alex is alex is alex\')) #三个用法对比
# print(re.search(\'alex\',\'alex is alex is alex\'))
# print(re.match(\'alex\',\'alex is alex is alex\'))
# pattern=re.compile(\'alex\') #简写模式
# print(pattern.findall(\'alex is alex is alex\'))
# print(pattern.search(\'alex is alex is alex\'))
# print(pattern.match(\'alex is alex is alex\'))
# msg=\"1-2*(60+(-40.35/5)-(-40*3))\"
# [\'1\', \'2\', \'60\', \'-40.35\', \'5\', \'-40\', \'3\'] #得出这种结果
# print(re.findall(\'\\D?(-?\\d+\\.?\\d*)\',msg))
#推导过程
# print(re.findall(\'\\d*\',msg)) #取数字类型
# print(re.findall(\'-?\\d*\',msg)) #取带-号的值,加上-号,可以有,可以没有
# print(re.findall(\'-?\\.?\\d*\',msg)) #取带点的,加上-,要加转义符,不然是任意的意思
# print(re.findall(\'-?\\d+\\.?\\d*\',msg)) #再次定义数字类型,取至少一个以上的数字
# print(re.findall(\'-?\\d+\\.?\\d*\',msg)) #只取是做-号的-号,减法的去掉
# print(re.findall(\'\\D?(-?\\d+\\.?\\d*)\',msg)) #判断-号的类型,在非数字类型后面的-号就是要取的。
继续阅读与本文标签相同的文章
java类的加载过程
视觉传感器几大技术要点详解!
-
给网站添加微信扫描二维码登录功能
2026-05-19栏目: 教程
-
Sharding-Jdbc之读写分离导读
2026-05-19栏目: 教程
-
Sharding-Jdbc分库分表的导读
2026-05-19栏目: 教程
-
日志服务数据加工培训直播资料汇总: 扫平日志分析路上障碍, 实时海量日志加工实践
2026-05-19栏目: 教程
-
OCP-052考试题库汇总(46)-CUUG内部解答版
2026-05-19栏目: 教程
