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))
posted @ 2019-07-31 20:38  Laura&  阅读(129)  评论(0)    收藏  举报