Python3正则表达式_re模块_教程详解_笔记_完整内容
正则表达式,用于在一大堆数据中查找信息,学习后有利于爬虫信息抓取。
“. ^ $ * + ? { } [ ] | ( )”是元字符(关键字),如要匹配原字符则需加“”,如“[”“\”。为避免与转义符(
、)冲突,可在字符串前加r,即 r”” 或 r”” 。
字符:
“d”表示数字
“D”表示非数字的字符
“s”表示空白字符,相当于[
fv]
“S”相当于[^
fv]
“w”表示数字或字母
“W”表示非数字和字母的字符
“.”表示除换行符”
“外的所有字符,DOTALL模式下可匹配任何字符(包括”
“)
“[]”整体为一个字符,其中的内容表示”或者”关系,同时元字符全部失效。如:[12]表示”1″或”2″,[a-z]表示小写字母(包括扩展拉丁字母如 “é”),[A-Za-z]表示所有字母,而[^a]表示除”a”以外的所有字符,[a^]表示”a”或”^”。由于元字符失效,从而可以 “[
]” 的方式表示回车符等转义符,但复杂情况下仍推荐使用 r””。
以下字符都不代表实际字符,即所谓零宽度,称为断言:
“^”指示行的开头,不代表实际字符,如MULTILINE模式下以“^a”去匹配“b
ab”则span=(2, 3)。若不是MULTILINE,则仅指示字符串开头。
“$”指示行的末尾。同样需要MULTILINE
“A”指示字符串的开头
“”指示字符串的末尾
“”指示词边界,即每个单词的开头和结尾,单词结构中可包括数字和字母,其他字符如空格逗号可以将其分割为一个个单词。可以指示字符串开头。可能与退格符””冲突,加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"(w+)s+1") print(p.search("Paris in the the spring").group())