用户名:**神哪救救我吧
正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都来自可以使用正则表达式来完问答成,作为一个爬虫工作宅每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的女厚音赵研在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只根利食巴是换了个函数的名称而已,本质都是一样的。下面,我来介绍一下python中的正则表达式是怎么使用的。
首先,python中的正纸息刘差向混丝岩直领易则表达式大致分为以下几部分:
元字符模式函数re内置对象用法分组用法环视用法
所有关于正则表达式的操作都使用python标准库中的re模块。
一、元字符(参见python模块re文档)
.匹配任意字符(不包括换行符)^匹配开始位置,多行模式下匹配每一行的开始$匹配结束位置,多行模式下匹配每一行的结束*匹配前一个元字符0到多次+匹配前一个元字符1到多次?匹配前一个元字符0到1次{m,n}匹配前一个元字符m到n次\\转义字符,跟在其后的字符将失去作担快初接盾为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符[]字符集,一个字符的集合,可匹配其中任意一个字符|逻辑表达式或,比如a|b代表可匹配a或者b()分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从1开始,按照"("的顺序决定索引值(?iLmsux)分组中可以设置模式,iLmsux之中的每个字符代表一个模式,用法参见模式I(?:)分组的不捕获模式,计算索引时会等各会跳过这个分组(?P<name>)分组的命名模式,取此分组中的内容时可以使用索引也可以使用name(?P=name)分组的引用模式,可在同一个正则表达式用引用前面命名过的正则(?#)注释,不影响正则表达式其它部分,用法参见模式I(?=)顺备序肯定环视,表示所在位置右侧能够匹配括号内正则(?!)顺序否定环视,表示所在位置右侧不能匹配括号内正则(?<=...)逆台权频联序肯定环视,表示所在品注见布威至怀位置左侧能够匹配括号内正则(?<!)逆序否定环视,表示所在位置左侧不能匹配括号内正则(?步空负(id/name)ye识目力s|no)若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则\**mber匹配和前面索引为**mber的分组捕获到的内容一样的字符串\A匹配字符串开始位置,忽略多行模式\Z匹配字符串结束位置,忽略多行模式\b匹配位于单词开始或结率观束位置的空字符串\B匹配不位于单词开始或结束位置的空字符串\d匹配一个数字,相当于[0-9与灯治明航散来容编注]\D匹配非到群心聚图曾绿举数字,相当于[^0-9]\s匹配任意空白字符,相当于[\t\n\r\f\v]\煤升操板做太字需S匹配非空白字符,相当于[^\t\n\r\f\v]\w匹切分统掌顶磁呼上病风牛配数字、字母、下划线中任意一个字符,相当于[a-zA-Z0-9_]\W匹跳只充半迫唱配非数字、字母、下跟有协希毫剧斤图级检背划线中的任意字符,相当于[^a-zA-Z0-9_]
二、模式
IIGNORECA**,忽略大小写的匹配模式,样例如下s='helloWorld!'regex=re.compile("helloworld!",re.I)printregex.match(s).group()#output>'h**elloWorld!'#在正则表达式中指定模式以及注释
regex=re.compile("(?#注释)(?i)helloworld!")printregex.match(s).group()#output>'h**elloWorld!'LLOCALE,字符集本地化。这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符\w,在英文环境下,它代表[a-zA-Z0-9_],即所以英文字符和数字。如果在一个法语环境下使用,缺省设置下,不能匹配"é"或"?"。加上这L选项和就可以匹配了。http://www.***.com/dyfblog/p/5880728.html