重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
正则表达式,用于在一大堆数据中查找信息,学习后有利于爬虫信息抓取。
创新互联是网站建设技术企业,为成都企业提供专业的网站设计制作、成都网站建设,网站设计,网站制作,网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制适合企业的网站。10多年品质,值得信赖!
“. ^ $ * + ? { } [ ] \ | ( )”是元字符(关键字),如要匹配原字符则需加“\”,如“\[”“\\”。为避免与转义符(\n、\b)冲突,可在字符串前加r,即 r"" 或 r'' 。
字符:
“\d”表示数字
“\D”表示非数字的字符
“\s”表示空白字符,相当于[ \t\n\r\f\v]
“\S”相当于[^ \t\n\r\f\v]
“\w”表示数字或字母
“\W”表示非数字和字母的字符
“.”表示除换行符'\n'外的所有字符,DOTALL模式下可匹配任何字符(包括'\n')
“[]”整体为一个字符,其中的内容表示"或者"关系,同时元字符全部失效。如:[12]表示'1'或'2',[a-z]表示小写字母(包括扩展拉丁字母如 'é'),[A-Za-z]表示所有字母,而[^a]表示除'a'以外的所有字符,[a^]表示'a'或'^'。由于元字符失效,从而可以 '[\n]' 的方式表示回车符等转义符,但复杂情况下仍推荐使用 r""。
以下字符都不代表实际字符,即所谓零宽度,称为断言:
“^”指示行的开头,不代表实际字符,如MULTILINE模式下以“^a”去匹配“b\nab”则span=(2, 3)。若不是MULTILINE,则仅指示字符串开头。
“$”指示行的末尾。同样需要MULTILINE
“\A”指示字符串的开头
“\Z”指示字符串的末尾
“\b”指示词边界,即每个单词的开头和结尾,单词结构中可包括数字和字母,其他字符如空格逗号可以将其分割为一个个单词。可以指示字符串开头。可能与退格符'\b'冲突,加r或使用'\\b'。
“|”表示或者,优先级比普通字符还低,如“phone|tele”表示"phone"或"tele"
而“()”可控制“|”的范围,如“the (phone|tele)”
重复:
“*”表示前一个字符重复0~+inf次
“+”表示前一个字符重复1~+inf次
“?”表示前一个字符重复0或1次,可有可无
“{m}”表示前一个字符重复m次
“{a,b}”表示前一个字符重复a~b次,同时“{,b}”表示0~b,“{a,}”表示a~+inf次。注意大括号中不可包含空格,如“{a, b}”是错误的,应为“{a,b}”。
以上符号默认均为贪婪模式,即匹配尽可能多的字符。如果需匹配尽可能少的字符,可在其后加上“?”符号,如“a*?”为非贪婪模式。
“()”可使重复符号作用于其括住的全部字符上,如“(br)*”指'br'重复0~+inf次
【re模块】
基本方法:
“p = re.compile(r'ab*')”编译一个匹配器(正则),r'ab*'为匹配规则的表达式(模式)
“m = p.match('abbcabd')”在'abbcabd'中从第一个字符开始匹配,结果保存在match对象中并返回
“m = p.search('abbcabd')”在'abbcabd'中不断向后查找,只返回第一个最先匹配到的内容
“listAll = p.findall('abbcabd')”在'abbcabd'中不断向后查找所有能匹配的内容,并将其以列表的方式返回
“iterAll = p.finditer('abbcabd')”上一种方式的迭代器版本,迭代时才查找并返回内容
“s = m.group()”或“s = m.group(0)”获得匹配的内容
“s = m.start()”获得匹配内容在字符串中的起始索引值,指向匹配内容的第一个字符
“s = m.end()”获得匹配内容在字符串中的终止索引值,指向匹配内容最后一个字符的后一个字符
“s = m.span()”获得匹配内容在字符串中的范围,元组方式返回,范围为左包含而右不包含的
“print(m)”输出匹配的范围和内容
分组:
在正则表达式中把需要的信息用小括号“()”括起来,即可获得它们,称为分组。如:
“p = re.compile(r'\w(\w)(\w+)')”
“m = p.match('This is Python')”
之后“m.group(1)”可返回第一个分组的内容,即'h'
“m.group(2)”可返回第二个分组的内容,即'is'
以此类推
而“m.group()”或“m.group(0)”依然返回匹配到的所有内容,即 'This'
“m.groups()”可将所有分组内容以元组的方式返回,即('h', 'is')
分组编号从左到右,由内而外。如以r'\w((\w)\w+)'匹配'This is Python'则第一个分组内容为 'his',第二个为 'h',groups()得 ('his', 'h')。
“\1”可指代前面第一个分组匹配到的内容,表示“\1”这里必须要再次出现此内容,可用于检测双字(叠词)。如:
p = re.compile(r'\b(\w+)\s+\1\b') print(p.search('Paris in the the spring').group())