.:默认是匹配除换行之外的所有字符
^: 匹配字符串的开始位置
$: 匹配字符串的结束位置
*: 匹配0次,1次或多次前面出现的字符
\s:匹配任何空格字符(包括\n:换行,\t:)
\S: 匹配除空白字符之外的任意一个字符
\w:Unicode下能匹配数字,字母,下划线,还能匹配汉字等其他语言的字母,但不能匹配标点如’;', 也不能匹配注释符\也不匹配空格等,如果设置了是ASCII只匹配大小写字母和数字,与\W相反
\d: 匹配任意一个十进制数
\D: 匹配除十进制数之外的任意一个其他字符
flags:
a{m}:匹配m个a
a{m, n}:匹配a出现m到n次,如果忽略m,默认为0,如果忽略n,默认为最少匹配m次
[]:多种用法:
• eg. [amk]:匹配a,m或k
• eg. [1-9][a-z]:通过“-”指定范围,可以匹配1到9,a到z任意一个数字或字母
re.ASCII:只匹配ASCII字符
re.I
re.IGNORECASE:不区分大小写,这两种形式都可以
re.S
re.DOTALL:这个标志可以让”.“匹配任何字符包括换行符,主要也就是用来匹配换行符”\n“的
re.M/re.MULTILINE: 可以匹配多行
使用心得:
推荐使用预编译成正则表达式对象再进行操作。但预编译并不是必须的,如果需要编译就使用编译过的方法,如果不需要就是用函数,函数名和方法名是相同的
compile(pattern, flags=0):编译正则表达式的模式,返回一个正则表达式对象
1.以下两个方法返回 匹配(match) 对象,可以用在正则表达式对象之后:
match(pattern, string, flags=0):从字符串的开头找到匹配项,只匹配开头,后面即使有也不匹配,匹配不到返回None
search(pattern, string, flags=0):查找模式,不但搜索模式在字符串中第一次出现的位置,而且严格地对字符串从左到右搜索,匹配不到返回None, 注意:这个方法从左到右只搜索第一个匹配到的地方后就不会往后搜索了
match对象的以下三个方法,这两个方法是用来匹配子组的,如果要查找所有符合pat的元素应该使用findall/finditer等:
• group([group1, …]):返回一个元组,要么返回整个匹配对象(参数为0或没有,没有默认为0),要么根据要求返回特定子组(参数可为多个),子组是从1开始的,返回的是捕获组的内容,如果匹配不到返回为None;如果是指定命名组名称,可以将名称字符串作为group的参数返回对应的键值;异常:IndexError
• groups():返回一个包含唯一或全部子组的元组。只匹配子组,如果没有子组,group()仍然返回整个匹配时,但groups返回一个空元组
• groupdict(default=None):返回一个以名字命名的子组的字典。返回所有匹配到的字典,这个方法貌似只用在使用 ?P 指定子组名字的对象
2.查找:
• findall(pattern, string, flags=0):在string中找到所有匹配pattern的所有字符串,以列表的形式返回
• finditer(pattern, string, flags=0):功能上,返回一个迭代器,以迭代的方式返回匹配对象:注意返回的是match对象
注:search的group和查找中的findall方法有挺大的区别
怎样让{}和search/findall配合使用?目前展示的效果是只能找到第一个
3.替换
sub(pattern, repl, string, count=0, flags=0):在string中把pattern模式替换为repl,返回替换后的字符串,原string不变
• 第一个参数是要匹配的模式
• 第二个参数是要替换的模式。类似“\6”这样的反斜线加数字的符号代表模式中捕获组号对应的字符串
• 对于更复杂的情况,可以将第二个参数替换为一个回调函数,该函数返回一个用来替换的字符串,入参是一个匹配对象
• 对于第二个参数是回调函数的情况:
subn():和sub一样,但还返回一个表示替换的总数,替换后的字符串和表示替换总数的数字作为一个拥有两个元素的元组返回
现在有个问题:怎样替换多个正则表达式对象?
4.其他方法
split(pattern,string,maxsplit=0,flag=0):根据pattern指定的模式分解string,返回一个列表
概念:
• 捕获组: 就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。只要用到()的地方就会引入捕获组?捕获组能将每个组的内容单独取出来
5.scanner():(这个方法在手册中没找到)创建一个scanner对象,在这个对象上不断调用match方法会一步步扫描目标文本:cookbook2.18,用的比较少;
里面还有两个方法/属性:
• lastgroup:命名组的捕获名称
• group():捕获到的内容