1. 什么是正则表达式
用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑.
2. 正则表达式的常见语法
试试下面正则的结果,注意. 不能匹配\n
string_a = '<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\n\t\t<meta http-equiv="content-type" content="text/html;charset=utf-8">\n\t\t<meta content="always" name="referrer">\n <meta name="theme-color" content="#2932e1">' ret = re.findall("<.*>",string_a) print(ret)
3.re模块的常见方法
re.match(从头找一个)
re.search(从整个字符串找,找出一个)
re.findall(找出所有的,返回一个列表)
re.sub(替换) 第一个参数是要替换的字符串,第二个是替换后的字符串,第三个是整个字符串
re.compile(编译)
返回一个模型P,具有和re一样的方法,但是传递的参数不同,匹配模式需要传到compile中.
p = re.compile("\d",re.S)
p.findall("python111")
re.S 和re.DOTALL表示匹配换行,re>I 表示忽略大小写
4. python中原始字符串r的用法
原始字符串定义(raw string):所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符,原始字符串往往针对特殊字符而言。例如"\n"
的原始字符串就是"\\n".
总结:正则中使用原始字符串r
能够忽略转义符号带来的影响,加上原始字符串r
之后,待匹配的字符串中有多少个\
,正则中就添加多少个\
即可.
windows中原始字符串r的使用,由于windows中的路径用\表示,但是在正则表达式中,\表示转义,如果不用r,正则会试图将它转义,这样就会标错.
重点: re.findall(r“a.*bc”,”a\nbc”,re.DOTALL)
和re.findall(r“a(.*)bc”,”a\nbc”,re.DOTALL)
的区别?
不分组时匹配的是全部,分组后匹配的是组内的内容.
re模块匹配分组
split 根据匹配进行切割字符串,并返回一个列表
#coding=utf-8
import re
ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret)
注意点 :
匹配出<html>hh</html>
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>")
匹配出<html><h1>www.Python.cn</h1></html>
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", label)
匹配出<html><h1>www.python.cn</h1></html>
ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>python</h1></html>")
注意:(?P<name>)
和(?P=name)
中的字母p大写