python-re模块简介-正则元字符

  • re模块简介

'''
python自1.5以后增加了re的模块,提供了正则表达式模式
'''

import re

#pip  包管理工具

'''
re.match函数
原型:match(pattern, string, flags=0)
参数:pattern-匹配的正则表达式
     string-要匹配的字符串
     flags-标识位,用于控制正则表达式的匹配方式,值如下
     re.I 忽略大小写
     re.L 做本地化识别
     re.M 多行匹配,影响^和$
     re.s 是. 匹配包括换行符在内的所有字符
     re.U 根据Unicode字符集解析字符,影响\w \W \b \B
     re.X 使我们以更灵活的格式理解正则表达式
功能:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,返回None

'''

#www.baidu.com
print(re.match("www", "www.baidu.com"))
print(re.match("www", "www.baidu.com").span())
print(re.match("www", "ww.baidu.com"))
print(re.match("www", "baidu.wwwcom"))
print(re.match("www", "Www.baidu.com"))
print(re.match("www", "Www.baidu.com", flags=re.I))

#扫描整个字符串,返回从起始位置成功的匹配

'''
re.search函数
原型:search(pattern, string, flags=0)
参数:pattern-匹配的正则表达式
     string-要匹配的字符串
     flags-标识位,用于控制正则表达式的匹配方式
功能:扫描整个字符串,并返回第一个成功的匹配
'''
print(re.search("sunck", "good man is sunck!sunck nice"))

'''
re.findall函数
原型:findall(pattern, string, flags=0)
参数:pattern-匹配的正则表达式
     string-要匹配的字符串
     flags-标识位,用于控制正则表达式的匹配方式
功能:扫描整个字符串,并返回结果列表
'''
print(re.findall("sunck", "good man is sunck!sUnck nice",flags=re.I))
  • 正则表达式的元字符
匹配单个字符与数字

import re

'''
.  匹配除换行符以外的任意字符
[0123456789]  []是字符集和,表示匹配中括号中所包含的任意一个字符
[sunck]      匹配"s","u","n","c","k"中任意一个字符
[a-z]        匹配任意小写字母
[A-Z]        匹配任意大写字母
[0-9]        匹配任意数字
[0-9a-zA-Z]  匹配任意的数字和大小写字母
[0-9a-zA-Z_] 匹配任意的数字和大小写字母和下划线
[^sunck]     匹配除了sunck几个字母以外的所有字符中括号内^称为脱字符,
            表示不匹配集合中的字符
[^0-9]       匹配所有的非数字字符
\d           匹配数字,效果同[0-9]
\D           匹配非数字字符,效果同[^0-9]
\w           匹配数字、字母和下划线,同[0-9a-zA-Z_]
\W           匹配非数字字母、字母和下划线,同[^0-9a-zA-Z_]
\s           匹配任意的空白符(空格,换行,回车,换页,制表)同[ \f\n\r\t]
\S           匹配任意的非空白符,同[^ \f\n\r\t]

'''

print(re.search(".","good good 6 study"))
print(re.search("[0123456789]","good good 9 study"))


锚字符(边界字符)

'''
^   行首匹配,和在[]里的不是一个意思
$   行尾匹配

\A  匹配字符串开始,它和^的区别是\A只匹配整个字符串的开头,即使在re.M
    模式下也不会匹配别行的行首
\Z  匹配字符串结束,它和$的区别是\A只匹配整个字符串的结束,即使在re.M
    模式下也不会匹配别行的行尾

\b  匹配一个单词的边界也就是指单词和空格间的位置,'er\b'可以匹配never,不能
    匹配nerve
\B  匹配非单词边界

'''

print(re.search("^good$","good good study"))

print(re.findall("^good","good good study\ngood good study",re.M))
print(re.findall("\Agood","good good study\ngood good study",re.M))

print(re.findall("study$","good good study\ngood good study",re.M))
print(re.findall("study\Z","good good study\ngood good study",re.M))

print(re.search(r"er\b","never"))
print(re.search(r"er\b","nerve"))
print(re.search(r"er\B","never"))
print(re.search(r"er\B","nerve"))


匹配多个字符

'''
以下x,y,z为假设的普通字符,m,n是非负整数,不是正则表达式的元字符
(xyz)   匹配小括号内的xyz(作为一个整体去匹配)
x?      匹配0或1个x
x*      匹配0或任意多个x(.* 表示匹配0个或任意多个字符(换行符除外))
x+      匹配至少一个x
x{n}    匹配确定的n个x(n是一个非负整数)
x{n,}   匹配至少n个x
x{n,m}  匹配至少n个最多m个x
x|y     |表示或,匹配x或y

'''
print(re.findall(r"(good)","good good study"))
print(re.findall(r"o?","good good study"))#非贪婪匹配
print(re.findall(r"o*","good good ostudy"))#贪婪匹配(尽可能多的匹配)
print(re.findall(r"o+","good good ostudy"))
print(re.findall(r"o{3}","goood good study"))
print(re.findall(r"o{2,}","goood good ostudy"))
print(re.findall(r"((g|u)ood)","goood good ostudy"))


####提取good......study
str = "good god study!good hard study"
print(re.findall(r"good.*?study",str))


#特殊
'''
*?   +?   ??   最小匹配 通常都是尽可能多的匹配,可以使用这种方式解决贪婪匹配
(?:x)     类似(xyz),但不表示一个组
'''
#注释:  /* part1 */   /* part2 */
print(re.findall(r"//*.*?/*/",r"/* part1 */   /* part2 */"))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值