1. 什么是正则表达式

用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑.

2. 正则表达式的常见语法

正则表达式提取mysql连接信息 正则表达式提取字段_python

试试下面正则的结果,注意. 不能匹配\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) 
 
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模块匹配分组

正则表达式提取mysql连接信息 正则表达式提取字段_正则表达式提取mysql连接信息_02

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>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>
<html><h1>www.Python.cn</h1></html>  
<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大写