正则表达式提取数据

1. 什么是正则表达式

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

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

试试下面正则的结果,注意. 不能匹配

string_a = '<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <meta content="always" name="referrer"> <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".

总结:正则中使用原始字符串r能够忽略转义符号带来的影响,加上原始字符串r之后,待匹配的字符串中有多少个,正则中就添加多少个即可.

windows中原始字符串r的使用,由于windows中的路径用表示,但是在正则表达式中,表示转义,如果不用r,正则会试图将它转义,这样就会标错.

重点: re.findall(r“a.*bc”,”a bc”,re.DOTALL)re.findall(r“a(.*)bc”,”a bc”,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大写

 


 

 


原文地址:https://www.cnblogs.com/yinjiangchong/p/9439837.html