10.python学习之正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
python最新学习宝典系列文章
- 01.python学习之基础
- 02.python学习之文件操作
- 03.python学习之模块与包
- 04.python学习之数据类型
- 05.python学习之元类
- 06.python学习之内存管理与垃圾回收机制
- 07.python学习之函数
- 08.python学习之设计模式
- 09.python学习之面向对象
- 10.python学习之正则表达式
- 11.python学习之系统编程
- 12.python学习之网络编程
- 13.python学习之Flask
- 14.python学习之Django
- 15.python学习之爬虫
- 16.python学习之MySQL
- 17.python学习之Redis
- 18.python学习之数据结构
- 99.python学习之常规题
- 100.python学习之常见题
请写出一段代码用正则匹配出ip?
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
a = “abbbccc”
,用正则匹配为abccc
,不管有多少b,就出现一次?
1 | import re |
abccc
Python字符串查找和替换?
- **
str.find()
**:正序字符串查找函数
函数原型:
str.find(substr [,pos_start [,pos_end ] ] )
返回str中第一次出现的substr的第一个字母的标号,如果str中没有substr则返回-1,也就是说从左边算起的第一次出现的substr的首字母标号。
参数说明:
str
:代表原字符串
substr
:代表要查找的字符串
pos_start
:代表查找的开始位置,默认是从下标0开始查找
pos_end
:代表查找的结束位置
例子:
'aabbcc.find('bb')' # 2
**
str.index()
**:正序字符串查找函数index()函数类似于find()函数,在Python中也是在字符串中查找子串第一次出现的位置,跟find()不同的是,未找到则抛出异常。
函数原型:
str.index(substr [, pos_start, [ pos_end ] ] )
参数说明:
str
:代表原字符串substr
:代表要查找的字符串pos_start
:代表查找的开始位置,默认是从下标0开始查找pos_end
:代表查找的结束位置例子:
'acdd l1 23'.index(' ') # 4
**
str.rfind()
**:倒序字符串查找函数函数原型:
str.rfind( substr [, pos_start [,pos_ end ] ])
返回str中最后出现的substr的第一个字母的标号,如果str中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号。
参数说明:
str
:代表原字符串substr
:代表要查找的字符串pos_start
:代表查找的开始位置,默认是从下标0开始查找pos_end
:代表查找的结束位置例子:
'adsfddf'.rfind('d') # 5
**
str.rindex()
**:倒序字符串查找函数rindex()
函数类似于rfind()函数,在Python中也是在字符串中倒序查找子串最后一次出现的位置,跟rfind()不同的是,未找到则抛出异常。函数原型:
str.rindex(substr [, pos_start, [ pos_end ] ] )
参数说明:
str
:代表原字符串substr
:代表要查找的字符串pos_start
:代表查找的开始位置,默认是从下标0开始查找pos_end
:代表查找的结束位置例子:
'adsfddf'.rindex('d') # 5
使用re模块进行查找和替换:
函数 | 说明 |
---|---|
re.match(pat, s) | 只从字符串s的头开始匹配,比如(‘123’, ‘12345’) 匹配上了,而(‘123’,’01234’) 就是没有匹配上,没有匹配上返回None ,匹配上返回matchobject |
re.search(pat, s) | 从字符串s的任意位置都进行匹配,比如(‘123’,’01234’) 就是匹配上了,只要s 只能存在符合pat 的连续字符串就算匹配上了,没有匹配上返回None ,匹配上返回matchobject |
re.sub(pat,newpat,s) | re.sub(pat,newpat,s) 对字符串中s 的包含的所有符合pat 的连续字符串进行替换,如果newpat 为str ,那么就是替换为newpat ,如果newpat 是函数,那么就按照函数返回值替换。sub 函数两个有默认值的参数分别是count 表示最多只处理前几个匹配的字符串,默认为0 表示全部处理;最后一个是flags ,默认为0 |
- 使用**
replace()
**进行替换:
基本用法:对象.replace(rgExp,replaceText,max)
其中,rgExp和replaceText是必须要有的,max是可选的参数,可以不加。
rgExp是指正则表达式模式或可用标志的正则表达式对象,也可以是 String 对象或文字;
replaceText是一个String 对象或字符串文字;
max是一个数字。
对于一个对象,在对象的每个rgExp都替换成replaceText,从左到右最多max次。
1 | s1='hello world' |
用Python匹配HTML tag的时候,<.>
和 <.?>
有什么区别
第一个代表贪心匹配,第二个代表非贪心;?
在一般正则表达式里的语法是指的”零次或一次匹配左边的字符或表达式”相当于{0,1}
而当?
后缀于*
,+
,?
,{n}
,{n,}
,{n,m}
之后,则代表非贪心匹配模式,也就是说,尽可能少的匹配左边的字符或表达式,这里是尽可能少的匹配.(任意字符)
所以:第一种写法是,尽可能多的匹配,就是匹配到的字符串尽量长,第二中写法是尽可能少的匹配,就是匹配到的字符串尽量短。
比如<tag>tag>tag>end
,第一个会匹配<tag>tag>tag>
,第二个会匹配<tag>
。
正则表达式贪婪与非贪婪模式的区别?
贪婪模式:
定义:正则表达式去匹配时,会尽量多的匹配符合条件的内容
标识符:+
,?
,*
,{n}
,{n,}
,{n,m}
匹配时,如果遇到上述标识符,代表是贪婪匹配,会尽可能多的去匹配内容
非贪婪模式:
定义:正则表达式去匹配时,会尽量少的匹配符合条件的内容 也就是说,一旦发现匹配符合要求,立马就匹配成功,而不会继续匹配下去(除非有g,开启下一组匹配)
标识符:+?
,??
,*?
,{n}?
,{n,}?
,{n,m}?
可以看到,非贪婪模式的标识符很有规律,就是贪婪模式的标识符后面加上一个?
写出开头匹配字母和下划线,末尾是数字的正则表达式?
1 | s1='_aai0efe00' |
['_aai0efe00']
怎么过滤评论中的表情?
思路:主要是匹配表情包的范围,将表情包的范围用空替换掉
1 | import re |
简述Python里面search和match的区别
match()
函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None;search()
函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
python最新学习宝典系列文章
- 01.python学习之基础
- 02.python学习之文件操作
- 03.python学习之模块与包
- 04.python学习之数据类型
- 05.python学习之元类
- 06.python学习之内存管理与垃圾回收机制
- 07.python学习之函数
- 08.python学习之设计模式
- 09.python学习之面向对象
- 10.python学习之正则表达式
- 11.python学习之系统编程
- 12.python学习之网络编程
- 13.python学习之Flask
- 14.python学习之Django
- 15.python学习之爬虫
- 16.python学习之MySQL
- 17.python学习之Redis
- 18.python学习之数据结构
- 99.python学习之常规题
- 100.python学习之常见题