正则表达式学习总结(快速入门)
目录
1. 背景:
爬虫中经常会对字符串提取需要的信息作为存储对象的操作。处理字符串用的比较多的技术就是正则表达式。每次处理文本信息,都需要重新查找正则表达式相关资料,学习使用。经常是查资料两小时,写表达式五分钟。为了节约下次写正则表达式的时间,这次直接将学习的正则表达式资料总结成文章,供大家查阅学习。废话不多说直接上干货。
2. 正则表达式作用:
处理文本信息,对文本信息进行查找,替换和删减。
Wiki:正则表达式(英语:Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
3. 正则表达式语法:
3.1. 预定义字符串:
\d 匹配所有十进制数字 0-9
\D 匹配所有的非数字,包含下划线
\w 匹配所有字母、汉字、数字 a-z A-Z 0-9
\W 匹配所有非字母、汉字、数字,包含下划线
\s 匹配所有空白字符(空格、TAB等)
\S 匹配所有非空白字符,包含下划线
\b 匹配一个单词边界
\B 匹配不是单词开头或结束的位置
3.2. 特殊字符:
$:匹配一行的结尾(必须放在正则表达式最后面)
egg: '[abc]$'
^:匹配一行的开头(必须放在正则表达式最前面)
egg: '^[abc]'
*:前面的字符可以出现0次或多次(0~无限)
+:前面的字符可以出现1次或多次(1~无限)
?:变"贪婪模式"为"非贪婪模式",前面的字符可以出现0次或1次
“数量词?” :非贪婪模式:只匹配最少的(尽可能少);默认贪婪模式:匹配最多的(尽可能多)
.:匹配除了换行符"\n"之外的任意单个字符
|:两项都进行匹配
3.3. 关于’( )‘,’[ ]‘,’{ }'的用法说明:
():表示取值并返回
(\d):表示取一个数字符号
[ ]:代表一个集合,有如下三种情况
[abc]:能匹配其中的单个字符
[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)
[2-9] [1-3]:能够做组合匹配
{ }:用于标记前面的字符出现的频率,有如下情况:
{n,m}:代表前面字符最少出现n次,最多出现m次
{n,}:代表前面字符最少出现n次,最多不受限制
{,m}:代表前面字符最多出现n次,最少不受限制
{n}:前面的字符必须出现n次
3.4. 特殊用法:
- 字符转义:
如果想要查找元字符本生,如 * ? 等需要使用转义字符\- 非贪婪模式:
.*? 匹配除 \n 外任意字符串- 查找重复单个字符,
直接字符后面加上限定符号 a*- 查找重复字符串
用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了
re.match(“\d+(183|192|168).(li|wang|liu)”,“452168.wang”).group(2)
4. python中re库常用示例:
str = "qaz123wsx456.@qq.com"
print(str)
#在字符串中寻找模式
#查找数字
list = re.search('\d+', str)
print('search')
print(list)
#在字符串开始处匹配模式
list = re.match('[a-z]+',str)
print('match')
print(list)
#根据模式分割字符串,根据数字分割
list = re.split('\d+',str)
print('split')
print(list)
#列表形式返回匹配项
#匹配数字
list = re.findall('.{0,3}(\d+).{0,3}(\d+).*',str)
print('findall')
print(list)
#用repl替换pat匹配项
#sub(pat, repl, string
#用A替换数字
list = re.sub('\d','A',str)
print('sub')
print(list)
运行结果: