- 一、正则表达式
- 正则的优缺点
- 正则的语法
- 元字符:具有固定含义的特殊符号
- 常用元字符:(每一个默认只代表一个字符)
- 量词:控制前面的元字符出现的次数
- 贪婪匹配和惰性匹配
- 二、正则表达式小练
- 总结
一、正则表达式
正则表达式,一种使用表达式的方式对字符串进行匹配的语法规则
我们抓取到的网页源代码本质上是一个超级长的字符串,想从里面提取内容,用正则无疑是最合适的方法。
正则的优缺点
正则的优点:速度快、效率高、准确性高
正则的缺点:上手难度对于新手来说非常不友好
使用元字符进行排列组合用来匹配字符串:在线测正则表达式https://tool.oschina.net/regex/(从开源中国中寻找),我们可以在这个页面中检验,我们所写的正则表达式是否正确,是否能获得我们想要的东西。
. 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线 s 匹配任意的空白符 d 匹配数字 n 匹配一个换行符 t 匹配一个制表符 ^ 匹配字符串的开始 $ 匹配字符出的结尾 W 匹配非字母或数字或下划线 D 匹配非数字 S 匹配非空白符 a|b 匹配字符a或b () 匹配括号内的表达式,也表示一个组 [...] 匹配字符数组中的字符 [^...] 匹配除了字符组中字符的所有字符量词:控制前面的元字符出现的次数
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
贪婪匹配和惰性匹配
.* 尽可能多的匹配字符 .*? 让*尽可能少的匹配字符二、正则表达式小练
import re
##findall:匹配字符串中所有的符合正则的内容 lst = re.findall(r'd+', '我的电话号码是:10086,我的QQ是:123456') print(lst)
[‘10086’, ‘123456’]
##finditer:匹配字符串中所有的符合正则的内容[返回的是迭代器]
it = re.finditer(r'd+', '我的电话号码是:10086,我的QQ是:123456')
for i in it:
print(i.group())
这里需要注意,finditer返回的是一个迭代器,里面的内容无法直接打印,必须通过一个for循环来输出
10086
123456
##search返回的是match独享的对象,找到一个结果就返回 s = re.search(r'd+', '我的电话号码是:10086,我的QQ是:123456') print(s.group())
10086
##match从头开始匹配 a = re.match(r'd+', '10086,我的QQ是:123456') print(a.group())
10086
##预加载正则表达式
obj = re.compile(r'd+')
ret = obj.finditer('我的电话号码是:10086,我的QQ是:123456')
for i in ret:
print(i.group())
10086
123456
#正则匹配空格也需要注意 #(?正则可以单独从正则匹配的内容中进一步提取内容) b = """ 达娃大而他他问题儿童去问轻柔""" jay = re.compile(r"(.*?)",re.S) #re.S表示匹配任意字符包括换行符 ddd = jay.finditer(b) for i in ddd: print(i.group(1),i.group(2),i.group(3))
总结jay 1 达娃大
jj 2 而他
jolin 3 他问题
syhr 4 儿童
dwad 5 去问轻柔
以上就是re正则表达式的一些简单的内容介绍和re的一些基本语法,re使用环境非常广泛,但是不熟练的话很难掌握



