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学习之常见题