正则表达式,用于在一大堆数据中查找信息,学习后有利于爬虫信息抓取。
“. ^ $ * + ? { } [ ] \ | ( )”是元字符(关键字),如要匹配原字符则需加“\”,如“\[”“\\”。为避免与转义符(\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'。
“\B”指示不在词边界时才匹配
“|”表示或者,优先级比普通字符还低,如“phone|tele”表示"phone"或"tele"
“()”可控制“|”的范围,如“the (phone|tele)”
重复:
“*”表示前一个字符重复0~+inf次
“+”表示前一个字符重复1~+inf次
“?”表示前一个字符重复0或1次,可有可无
“{a, b}”表示前一个字符重复a~b次,“{, b}”表示0~b,“{a, }”表示a~+inf次。
以上符号默认均为贪婪模式,即匹配尽可能多的字符。如果需匹配尽可能少的字符,可在其后加上“?”符号,如“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'中不断向后查找所有能匹配的内容,并