python学习_正则部分
1、正则
正则表达式:一种匹配字符串的规则,是从头到尾匹配的
字符组:[] 匹配一个字符,在字符组中一些特殊的字符会现出原形,^表示非,[^a] 匹配除a以外的其他字符
元字符:
\d: 匹配一个数字 \D:匹配非数字的其他字符
\w: 匹配数字、字母、下划线 \W:匹配非数字、字母、下划线的其他字符
\s: 匹配空格、\n,\t \S:匹配非空格,\n,\t的内容
[\s\S][\d\D][\w\W]:匹配全部的字符
. : 匹配除换行符外的全部字符
^: 表示以什么开始,一般出现在正则表达式的开始
$:表示以什么结束,一般出现在正则表达式的结尾
\b:匹配边界(字符串的前后)
\:转义匹配特殊字符
a|b:匹配a或者b,找到a之后就不招了,一次只有一个结果,当有两条规则重叠匹配的时候,长的放在前面(放在后面长的内容不会被匹配到)
量词:
什么都没有的字符串也会有一个开始符
{n} 表示前面一个正则表达式匹配多少次
{n,m} 表示前面一个正则表达式至少匹配n次,至多匹配m次,尽量多的匹配(贪婪匹配)
{n,}至少匹配n次,尽量多的匹配(贪婪匹配)
?匹配一次或者零次(贪婪匹配),使用在量词后,表示取消贪婪匹配(在能匹配上的情况下匹配最少的)
* 匹配零次或者任意多次
+ 匹配一次或者多次
分组:
() 整体约束 \d(\.\d+)?匹配整数或者小数
(?P<name>) 表示给分组起名字
(?P=name) 使用这个分组,表示匹配到的内容和分组中的内容完全一样 ,还可以使用数字来分组
转义符号:
python中的转义:\, r,r:python原始字符串,因为ASCII字符和正则表达式的特殊字符之间存在冲突,所以应该使用r原始字符串来表示python中的re表达式
2、python re模块
匹配:
findall: 返回一个所有结果的列表
search:结果是一个正则结果对象,没有找到None
match: 只能从头开始匹配
切割:
split
替换:
sub:相当于字符串操作的replace
subn:返回元组,替换之后的字符串,一个替换了几次的整数
进阶:
compile:预编译 节省时间(在多次使用一个相同的正则表达式的时候,会提高效率)
finditer: 节省内存 空间效率 一般使用在大量数据的时候,同生成器原理
特殊用法:
使用findall的时候会优先显示搜索结果中分组的内容,使用?:取消分组优先
split 使用() 会把被切掉的内容保存在列表内,
search: 有分组的话,group()可以拿到group中匹配内容
?:取消分组优先;
?=:正向前视断言;?!:负向前视断言
3、面试题目:
"""
去除以下html文件中的标签,只显示文本信息。
<div>
<p>岗位职责:</p>
<p>完成推荐算法、数据统计、接口、后台等服务器端相关工作</p>
<p><br></p>
<p>必备要求:</p>
<p>良好的自我驱动力和职业素养,工作积极主动、结果导向</p>
<p> <br></p>
<p>技术要求:</p>
<p>1、一年以上 Python 开发经验,掌握面向对象分析和设计,了解设计模式</p>
<p>2、掌握HTTP协议,熟悉MVC、MVVM等概念以及相关WEB开发框架</p>
<p>3、掌握关系数据库开发设计,掌握 SQL,熟练使用 MySQL/PostgreSQL 中的一种<br></p>
<p>4、掌握NoSQL、MQ,熟练使用对应技术解决方案</p>
<p>5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js</p>
<p> <br></p>
<p>加分项:</p>
<p>大数据,数理统计,机器学习,sklearn,高性能,大并发。</p>
</div>
"""
import re
with open('正则.txt', 'r') as f:
ret = re.compile("<p>|<div>|</div>|</p>|<br>|\s")
content = re.sub(ret, '', f.read())
print(content)
"""
将以下网址提取出域名:
"""
te = 'http://www.interoem.com/messageinfo.asp?id=35, http://3995503.com/class/class09/news_show.asp?id=14, ' \
'http://lib.wzmc.edu.cn/news/onews.asp?id=769, http://www.zy-ls.com/alfx.asp?newsid=377&id=6,' \
'http://www.fincm.com/newslist.asp?id=415'
ret = re.compile("http://.*?/")
res = re.finditer(ret, te)
for i in res:
print(i.group())
"""
提取出如下字符串中的单词:
"""
test_str = "hello world ha ha"
print(re.split(' ', test_str))

浙公网安备 33010602011771号