正则表达式是为了表示字符串之间内在规律,类似于数学中的函数表达式。
使用的python 三方包为re包,需要提前进行安装。
目的是实现普通函数不能实现的查找(findall)、替换(replace)及分割(split)。
############################################################
git上有很好的学习及练习网站,请学习完之后认真练习,git网址
网上同样也有很好的学习经验,请参考知乎网友分享的经验
############################################################
常见函数的表示方法为:
A. 查找 findall ,适用无法通过切片将字符串的子串返回。
findall(pattern,string,flags=0)
其中pattern是表达式,string是操作的字符串,flags指定匹配模式,re.I 制定的模式表示不区分大小写。
B. 替换 replace,借助于replace方法无法完成或非固定值或非固定位置值的替换
sub(pattern,repl,string,count=0,flags=0)
其中其他参数一样,count是指替换的次数。
C. 分割split,借助于spilt方法无法按照多种值实现字符串的分割
split(pattern,string,maxsplit=0,flags=0)
maxsplit是指切割次数
万能匹配符号 .*?
.代表任意符号,*代表前一个字符匹配0次或以上, 最后一个问号?是防止贪婪式匹配,一直到后面的引号出现为止。
.*?可以解决大部分问题。
######################################以下为重要知识点#######################################
正则表达式的函数中的pattern 表示元素有9种,按照匹配次数分为一次匹配,无限次匹配和有限次匹配。
- 一次匹配:原字符 英文状态的句号点. 转义符 \ 英文状态的[] 英文状态的()
- 无限次匹配:英文状态的? 加号+ 乘号*
- 有限次数匹配:英文状态的{}
匹配一次
a.原字符,匹配字符串内部的原始子串
b.英文状态的句号点. :指代任何字符(数字、字母、标点符号、汉字等),但除了换行符\n
在任意字符前加上\ 转义符,代表它原来的意思
c.反斜杠:转义符,用于转换含义的符号。
\n:指代换行,enter
\t:指代Tab制表符, 缩一格
\d: 指代0~9中的任意数字
\s: 指代任意一种空白(如空格space、Tab换行 \t、enter换行\n 等)
\w:指代字母、数字和下划线中的任意一种 一共63种,(52个字母,10个数字,下划线)
\.:指代句号点本身
\\ :只表示斜杠本身
d.英文状态的中括号[ ]
指代字符集和,当需要特定字符匹配时,可以选择中括号。如这个字符只能是5678组成,则使用[5678]
[ ]内部元素之间千万不能使用逗号隔开,如[a-zA-Z0-9],之间不能使用逗号
e.英文状态的圆括号()
指代特定内容的截取,如取age(‘\d’)
无限次的次数匹配--之前只能匹配一个字符
f.英文状态的问号?
表示匹配前一个字符的0次或1次,只有两个机会。
g.加号+
表示匹配前一个字符1次及以上
h.星号*
表示匹配前一个字符0次及以上
匹配次数为有限次
i.英文状态的大括号{ },固定匹配次数
表示匹配前一个字符特定的次数或范围。
{m} 匹配前一个字符m次
{m,} 匹配前一个字符至少m次
{m,n} 匹配前一个字符m~n次
{,n} 匹配前一个字符之多n次
万能匹配符号 .*?
.代表任意符号,*代表匹配0次或以上, 最后一个问号?是防止贪婪式匹配,一直到后面的引号出现为止。
.*? 可以解决大部分问题。