您现在的位置是:网站首页 > 分类 > 文章详情

python中正则表达式

T2019年4月19日 16:31269人围观
简介正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

推荐工具:mtracer
常用的匹配模式
\w 匹配字母数字及下划线
\W 匹配f非字母数字下划线
\s 匹配任意空白字符,等价于[\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意数字
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果存在换行,只匹配换行前的结束字符串
\z 匹配字符串结束
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串的开头
$ 匹配字符串的末尾
. 匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
* 匹配0个或多个的表达式
+ 匹配1个或者多个的表达式
? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配n前面的表示
{m,m} 匹配n到m次由前面的正则表达式定义片段,贪婪模式
a|b 匹配a或者b
() 匹配括号内的表达式,也表示一个组

平时常用的有search、findall、sub、match、split


1、用search来匹配出字符串中所有数字

import re


html = '''<div id="songs-list">
    <h2 class="title">经典老歌</h2>
    <p class="introduction">
        经典老歌列表
    </p>
    <ul id="list" class="list-group">
        <li data-view="2">一路上有你</li>
        <li data-view="7">
            <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
        </li>
        <li data-view="4" class="active">
            <a href="/3.mp3" singer="齐秦">往事随风</a>
        </li>
        <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
        <li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
        <li data-view="5">
            <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
        </li>
    </ul>
</div>'''

# search是搜索整个字符串
result = re.search('<li.*?active.*?singer="(.*?)">(.*?)</a>',html,re.S)  # .*?表示非贪婪模式,一般都用非贪婪,即匹配到一个字符就好
print(result.groups())  # result.group()获取匹配的结果
print(result.group(1))
print(result.group(2))
# findall返回的是一个list
results = re.findall('<li.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>', html, re.S)  # 用re.S模式来匹配换行
for result in results:
    mp3name, author, music = result
    print(mp3name, author, music)
# match 需要从字符串开头开始匹配,所以必须要知道字符串是啥开头的
res = re.match('<div.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>', html, re.S)
print(res.groups())
print(res.group(1))
print(res.group(2))
print(res.group(3))


2、sub作用是替换字符串中每一个匹配的子串后返回替换后的字符串

content = "Extra things hello 123455 World_this is a regex Demo extra things"
content = re.sub('\d+', '', content)  # re.sub(正则表达式,替换成的字符串,原字符串)
print(content)


3、split

s = 'info:jintao 18 wenzhou'
result = re.split(':| ',s)
print(result)

4、最后,还有一个compile(将表达式编译成正则表达式对象)

content= """hello 12345 world_this
123 fan
"""
pattern =re.compile("hello.*fan",re.S)
result = re.match(pattern,content)
print(result.group())


参考:https://www.cnblogs.com/alex3714/articles/8387073.html

文章评论

阿里云-云大使推广
阿里云-云服务器推广

微信公众号