9.1 正则
1, 判断一个字符串是否匹配给定的格式
?
从一个字符串中按指定格式提取信息
9.2 re
1,findall 方法:
在字符串中找到正则表达式所匹配的所有子串, 并返回一个列表, 如果没有找到匹配的, 则返回空列表
- import re #导入 re 模块,
- ?
- a ='python123python666pyt hon888'
- ?
- re. findall('python',a) # 把所符台规则的匹配出来, 返回一个列表 [ 'python', 'python','python' ]
- ?
- re. findall('123' ,a)
- [ '123' ]
- ?
- re.findall('999' ,a) #如果匹配的不存在, 则返回一一个空列表 []
2,match 方法:
re.match 尝试从字符串的起始位置匹配一个模式, 匹配成功 返回的是一个匹配
对象 (这个对象包含了我们匹配的信息), 如果不是起始位置匹配成功的话,
match() 返回的是空,
?
注意: match 只能匹配到一个
- import re .
- ?
- a ='python123python666python888"
- re .match('python',a)
- ?
- <_ sre.SRE_Match object; span=(e, 6), match='python">
- ?
- re .match( '123' ,a)
- ?
- »>> re .match( "python123', a)
- ?
- <_ sre.SRE_ Match object; span=(0, 9), match= 'python123'>l»»>
- ?
- bb = re. match('python" ,a)
- ?
- »> bb.group() ### 1. ###
- ?
- >>> bb. span() ### 2. ###
- ?
1. 可以通过 group() 提取匹配到的内容
?
2. 可以通过 span() 提取匹配到的字符下标
3,search 方法:
re.search 扫描整个字符串, 匹配成功 返回的是一个匹配对象 (这个对象包含了我们匹配的信息)
?
注意: search 也只能匹配到一个, 找到符合规则的就返回, 不会一直往后找
- re.search('123',a)
- <_ sre.SRE_ Match object; span=(6, 9), match='123'>
- ?
- re.search( "python',a)
- <_ sre.SRE_ Match object; span=(0, 6),match='python'>
- ?
- re.search('6',a)
- <_ sre.SRE_ Match object; span=(15, 16), match='6'>
- ?
- dd = re . search('python',a)
- dd. group()
- 'python"
- ?
- dd.span()
- (e, 6)
re.match 与 re.search 的区别:
re.match 只匹配字符串的开始位置找, 如果字符串开始不符合正则表达式, 则匹配失败,
re.search: 匹配整个字符串, 如果一直找不到则返回是空的, 没有结果
9.3 元字符 re.S 匹配换行符
1. 单字符匹配 :
字符 功能
. 匹配任意 1 个字符 (除了 \ n )
[] 匹配] 中列举的字符
\d 匹配数字, 即 0-9
\D 匹配非数字, 即不是数字
\s 匹配空白, 即空格, tab 键
\S 匹配非空白
\w 匹配单词字符, 即 2-Z,A-Z,0-9,_
\W 匹配非单词字符
2. 代表数量的元字符:
字符 功能
* 匹配前一个字符出现 0 次或者无限次, 即可有可无
+ 匹配前一个字符出现 1 次或者无限次, 即至少有 1 次
? 匹配前一个字符出现 1 次或者 0 次, 即要么有 1 次, 要么没有
{m} 匹配前一一个字符出现 m 次
{m,} 匹配前一个字符至少出现 m 次
{m,n} 匹配前一一个字符出现从 m 到 n 次
3. 表示边界的元字符:
字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配一一个单词的边界
\B 匹配非单词边界
4. 分组匹配
字符 功能
| 匹配左右任意 - - 个表达式 (ab) 将括号中字符作为一个分组
5. 贪婪与非贪婪
正则默认都是用贪婪模式去匹配数据的, 就是尽可能多的匹配符合要求的数据,
?
在非贪婪模式下, 始终找最短匹配
- a ='0008bbbb'
- ?
- re. findall(r'<.*>',a)
- ?
- ['090bbbb']
- ?
- re. findall(r'<.*?>',a) #加上? 变成非贪婪模式
- [ "',,"</html>',,'(td>'.'</td>']
- ?
- re. findall(r'-(\d+)(.+-)','-123456789-')
- [('12345678', '9-')]
- ?
- >>> re. findall(r'-(\d+?)(.+-)','-123456789-')[('1' ,'23456789-')]
来源: http://www.bubuko.com/infodetail-3240821.html