正则表达式:
1.概念:
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
**2.**方法
import re
>>> re.match("yitiantian","yitiantian is boring")
<re.Match object; span=(0, 10), match='yitiantian'>
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
3. 元字符(都匹配一位)
. 表示匹配任意一个,数字,字母。
\d 表示匹配任意一个数字
\d+ 表示匹配所有数字。
\w 表示匹配有效符号(大小写字母,数字,各个国家的文字符号)
\s (space) 匹配空格符号
\D 表示非数字
\W 表示非有效符
\S 表示非空白位
^ 表示以xxx开始
$ 表示以xxx结尾
[] 列举 [123456789] [0-9] [a-z] [A-Z]
[0-9a-zA-Z] === \w
4.转义符
在很多编程语言中,字符串中的反斜杠(\),
所有要表示,就不能用一个斜杠,必须用二个斜杠来表示一个\
>>> re.match("c:\\\\c","c:\\c")
<re.Match object; span=(0, 4), match='c:\\c'>
>>> re.match(r"c:\\c","c:\\c")
<re.Match object; span=(0, 4), match='c:\\c'>
5 位数的表示
#表示 0到多
#表示1到多
? #表示0到 1
{m} #表示m位
{m,} #表示至少m位
{m,n} #表示m到n 位
>>> p = r"[0-9a-zA-Z]{4,20}@xianoupeng\.(com|org|cn|net)"
>>> re.match(p,"rzsff@xianoupeng.com")
<re.Match object; span=(0, 20), match='rzsff@xianoupeng.com'>
反义符
\w
\S
\D
[^] #跟[] 列举里面的相反
>>> re.match(r"qq[abc].*","qqaxxxx")
<re.Match object; span=(0, 7), match='qqaxxxx'>
>>> re.match(r"qq[^abc].*","qqaxxxx")
>>>
>>> re.match(r"qq^[abc].*","qqaxxxx")
>>>
6.分组
res.group
>>> res = re.match(r"\d+(123)","456123")
>>> res
<re.Match object; span=(0, 6), match='456123'>
>>> res
<re.Match object; span=(0, 6), match='456123'>
>>> res.group(1)
'123'
>>> res.group(0)
'456123'
>>> res = re.match("(.*)(\d+)(.*)",s)
>(.*) 就代表匹配任意多个任意字符,(\d+)表示匹配至少一个数字 加上括号,就表示分组
>>> res.group(1)
'123 fsaf 12 34s fs 1'
>>> res.group(2)
'2'
>>> res.group(3)
' fs'
打了几个括号 ,就代表 分了几个组
7.re模块的应用
search方法
>>> re.search("\d+",s)
<re.Match object; span=(0, 3), match='123'>
>>> s
'123 fsaf 12 34s fs 12 fs'
finditer方法
>>> re.finditer(r"\d+",s)
<callable_iterator object at 0x032CFE70>
>>> res = re.finditer(r"\d+",s)
>>> next(res)
<re.Match object; span=(0, 3), match='123'>
>>> next(res)
<re.Match object; span=(9, 11), match='12'>
>>> next(res)
<re.Match object; span=(12, 14), match='34'>
sub方法
>>> ss = "\nn\n sf \n\rnnkn"
>>> re.sub("\r|\n|\s","",ss)
'nsfnnkn'
对字符串里面的特殊字符进行过滤
8.贪婪和懒惰
- ? {m,}等等 这些匹配会尽可能多的匹配,就是贪婪匹配。
>>> res = re.match("(.*?)(\d+)(.*)",s)
>在*后面加入? 就变成了 非贪婪模式。