正则表达式
2018-12-06 07:36:30来源:博客园 阅读 ()
#正则表达式
# 一:什么是正则?
# 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。
# 或者说:正则就是用来描述一类事物的规则。(在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)) #判断-号的类型,在非数字类型后面的-号就是要取的。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:python3.5程序设计
- python学习-53 正则表达式 2019-08-13
- python 之 re模块、hashlib模块 2019-07-24
- 正则表达式 2019-06-14
- 中缀表达式转换为后缀表达式(python实现) 2019-06-14
- day14-推导式和生成器表达式 2019-06-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash