python re模块

干货演示

import re
re.match函数

原型:match(pattern,string,flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
功能:尝试从字符串的起始位置匹配一个模式,
如果不是起始位置匹配,成功的话返回None,不匹配成功也返回None

re.I 忽略大小写
re.S 是.匹配包括换行符在内的所有字符
re.M 多行匹配,影响^和$
以上三个常用

re.L 做本地户识别
re.U 根据Unicode字符集解析字符,影响\w \W \b \B
re.X 是我们更灵活的格式理解正则表达式

str='13517737986abcdefghijklmnopqretuvwsyz'

print(re.match('www','www.baidu.com'))
print(re.match('www','.baidu.com.www'))

print(re.match('www','Www.baidu.com'))
print(re.match('www','wWw.baidu.com',flags=re.I))
re.search()函数

re.search()函数
原型:search(pattern,string,flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
功能:扫描整个字符串,并返回第一个匹配成功的

print(re.search('python','hhh is aaa il  python,fjdklsa python '))
re.findall()

re.findall函数
原型:match(pattern,string,flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
功能:扫描整个字符串并返回结果列表

print(re.findall('python','hhh is a pyThon a pythOn a il  python,fjdklsa python ',re.I))

正则表达式元字符

print(‘------re.search()--------------匹配单个字符与数字----------------’)

'''
r
.     匹配除换行符以外的任意字符
[0123456789]    []字符集合,表示匹配方括号中所包含的任意一个字符
[python]        匹配其中任意一个字符
[a-z]   匹配任意小写字母
[A-Z]   匹配任意大写字母
[0-9]   匹配任意数字
[0-9a-zA-Z]     匹配任意数字和字母和下划线

[^python]   匹配除了python这几个字母意外的所有字符,^表示不匹配集合中的字符(脱字符)
[^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.findall('\d', 'hhh is a pyThon a pyt2hOn a il python '))

print(‘--------------锚字符(边界字符)-------------------’)


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

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


\b  匹配一个单词的边界,也就是值单词和空格的位置
\B  匹配非单词边界
'''
print(re.search('^is','is python,is a good python'))
print(re.search('python$','is python,is a good python'))
print(re.findall('^is','is python,is a good python\n'
                      'is python,is a good python',re.M))
print(re.findall('\Ais','is python,is a good python\n'
                    'is python,is a good python',re.M))
 print(re.findall('python$','is python,is a good python\n'
                     'is python,is a good python',re.M))
 print(re.findall('python\Z','is python,is a good python\n'
                      'is python,is a good python',re.M))

 print(re.search(r'er\b','never'))

print(re.search(r'er\B','never'))

print(re.search(r'er\B','nerve'))

print(‘------------------匹配多个字符-------------’)

'''
说明:下方的下x,y,z均为假设的普通字符,n,m(非负整数)不是正则表达的元字符
(xyz)       匹配小括号内的xyz(作为一个整体取匹配)
x?          匹配0个或者1个x
x*          匹配0个或者任意多个x
x+          匹配至少1个x
x{n}        匹配确定的n个x(n是一个非负整数)
x{n,}       匹配至少n个x
x{n,m}      匹配至少n个最多m个x,注意:n<=m
x|y         |表示或,匹配的是x或y
'''

例子

print(re.findall(r'(python)','python is my teacher teacher is a good python'))

print(re.findall(r'o?','python is my teacher teacher is a good python'))

print(re.findall(r'a*','aaa'))   #非贪婪匹配,尽可能少的匹配
print(re.findall(r'n*','nnyytntoonn'))   #贪婪匹配,尽可能多的匹配
print(re.findall(r'n+','nnyytntoonn'))  #贪婪匹配,尽可能多的匹配
print(re.findall(r'n{2}','nnnnyytnntoonnn'))
print(re.findall(r'n{3,}','nnnnyytnntoonnn'))   #贪婪匹配,尽可能多的匹配
print(re.findall(r'n{4,5}','nnnnyytnntoonnn'))
print(re.findall(r'((p|P)ython)','python-Python'))

需求:提取python…man

str='python is a good hello!python is a box!python is a very good hello'

print(re.findall(r'python.*?hello',str))


print("--------------特殊——————————————————")
'''
*?  +?  x?  最小匹配,通常都是尽可能多的匹配,可以使用这种解决贪婪匹配
(?:x)       类似(xyz),但不表示一个组


'''
#注释:/* part1 */  /* part2 */
#                  /*  .  */  /  匹配
print(re.findall(r'/*.*/*/','/* part1 */  /* part2 */'))
print(re.findall(r'/*.*?/*/','/* part1 */  /* part2 */'))

判断是否是电话号码

def checkPhon(str):
    if len(str) != 11:
        return False
    elif str[0] != '1':
        return False
    elif str[1:3] != '30' and str[1:3] != '35':
        return False
    for i in range(3, 11):
        if str[i] < '0' and str[i] > '9':
            return False
    return True


import re


def checkPhone2(str):
    # pat=r'^1(([3578]\d)|(47))\d{8}$'
    pat = r'^1[3578]\d{9}$'
    res = re.match(pat, str)
    print(res)


# print(checkPhon('135177337861'))
# print(checkPhon('135177337a6'))
# print(checkPhon('23517733786'))
# print(checkPhon('13517737986'))
print('************')
checkPhone2('13412345678')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值