1.正则

  正则表达式是计算机科学的一个概念,正则表通常被用来检索、替换那些符合某个模式(规则)的文本。也就是说使用正则表达式可以在字符串中匹配出你需要的字符或者字符串,甚至可以替换你不需要的字符或者字符串。

元字符

 .   ^   $   *   +   ?   {}  []   \   |   ()
#大多数字母和字符会匹配它们自身,有少数特殊字符我们称为元字符,它们不能匹配自身 #子组匹配和模式重复次数等
. # 匹配除换行符之外的所有的字符
# \ 用于转义
\d # 匹配0~9的数字
\s # 匹配任意的空白符,包括空格,制表符(Tab),换行符等
\w # 匹配字母或数字或下划线或汉字等
\b # 表示单词的边界
\. # 表示匹配点号本身
\D、\S、\W、\B # 是与小写的相反的作用
^ # 脱字符,匹配输入字符串的开始的位置
$ # 匹配输入字符串的结束位置 #匹配次数
{M,N} # M和N 为非负整数,其中M<=N 表示前面的匹配M~N次
{M,} # 表示需要匹配M次 以上
{,N} # 等价于{0~N}
{N} # 表示需要匹配N次
* # 匹配前面的子表达式零次或多次,等价于{0,}
+ # 匹配前面的子表达式一次或多次,等价于{1,}
? # 匹配前面的子表达式零次或一次,等价于{0,1}
#注:*?、+?、{n,m}? 贪婪与懒惰 #子组匹配
[ ] # 字符类,将要匹配的一类字符集放在[]里面
#例如:
[ . ? * ( ) {} ] # 匹配里面的这些符号
[0-9] # 匹配0到9的数字相当于\d
[^\d] # 匹配除数字以外的字符,相当于\D
[a-z] # 匹配所有的小写字母
[^a-z] # 匹配非小写字母
| # 相当于或(or)分支条件
#例如:
A | B # 匹配字母A或者B 与[AB]是一样的 #分组
() #分组,将要匹配的一类字符集放在()组成一个小组

example:

# 正则: 就是匹配字符串
import re s= 'gjianengasfasdfjianeng12335748' ##### 普通匹配 自己匹配自己
# 你要找的内容 查找的对象
a = re.findall('jianeng',s ) ## 搜索字符串,以列表类型返回全部能匹配的子串
print(a)
#search() # 在一个字符串中搜索,匹配正则表达式的第一个位置,返回match对象
a = re.search('jianeng',s)
print(a) #### 正则 语法
a = re.findall('\d{3}',s)
print(a) ### . ^ $ * + ? {} [] \ | () # . # 匹配除换行符之外的所有的字符
dian = re.findall('.','a我s\t+=_#$dfa\nsdfas')
print(dian) # \ 用于转义
# \d # 匹配0~9的数字
d = re.findall('\d','abc123')
print(d) # \s # 匹配任意的空白符,包括空格,制表符(Tab),换行符等
s = re.findall('\s','abc\nbb\tsadf sdf' )
print(s) # \w # 匹配字母或数字或下划线或汉字等
w = re.findall('\w','asd_456我i')
print(w) # \b # 表示单词的边界
b = re.findall(r'read\b','read readapple')
print(b) # r'read\b' ,取消 字符串转义 ## 取消 字符串 转义 r 例: r'read\b'
## 取消 正则 转义 \ 例: \. # \. # 表示匹配点号本身
dian = re.findall(r'\.','asdf.asd') #\D、\S、\W、\B # 是与小写的相反的作用
D= re.findall(r'\D','a123pple')
print( D) S = re.findall('\S','abc\nbb\tsadf sdf' )
print(S) b = re.search(r'read\B','read readapple')
print( b) ## ^ # 脱字符,匹配输入字符串的开始的位置
t = re.search('^jianeng','jianengsadfsjianeng')
print(t) # $ # 匹配输入字符串的结束位置
t = re.search('jianeng$','jianengsadfsjianeng')
print(t) ##匹配次数
c = re.findall('\d{3}','89ahs123gvbsd34534566')
print( c ) #{M,N}
c = re.findall('\d{2,5}','89ahs123gvbsd34534566')
print( c ) #{M,} # 表示需要匹配M次 以上
c = re.findall('\d{2,}','89ahs123gvbsd34534566')
print( c ) # {,N} # 等价于{0~N}
c = re.findall('\d{,2}','89ahs1s')
print( c ) # * # 匹配前面的子表达式零次或多次,等价于{0,}
x = re.findall( '\d*','fds1525sdfg455' )
print(x) # + # 匹配前面的子表达式一次或多次,等价于{1,}
x = re.findall( '\d+','fds1525sdfg4554585444444545165854444444' )
print(x) # ? # 匹配前面的子表达式零次或一次,等价于{0,1}
x = re.findall( '\d?','fds1525sdfg455' )
print(x) #注:*?、+?、{n,m}? 贪婪与懒惰
# 贪婪 , 满足要求,选最大的
tan = re.findall('a.*t','amount at about')
print(tan)
# 懒惰 ,满足要求,就结束
lan = re.findall('a.*?t','amount at about')
print(lan) # #子组匹配
# [ ] # 字符类,将要匹配的一类字符集放在[]里面 zi = re.findall('[a-z0-9]','fsadf44565_5435')
print(zi)
# a | b| c
zi = re.findall('[abc]','fsadf44565_543b5c')
print(zi) # [ . ? * ( ) {} ] # 匹配里面的这些符号
zi = re.findall( '[.?*(){}]','.?*(){}')
print( zi ) ## [^\d] 取反的意思 zi = re.findall( '[^\d]','123456abc')
print(zi) ##| # 相当于或(or)分支条件
h = re.findall('abc|jianeng','abcsdfsajianeng')
print(h) # () #分组,将要匹配的一类字符集放在()组成一个小组
zu = re.search('xx(jianeng)xx','jianengfsxxjianengxxdgffgfxxjianengxxfgf')
print(zu ) # 要jianeng ,xx(jianeng)xx
zu = re.findall('xx(jianeng)xx','jianengfsxxjianengxxdgffgfxxjianengxxfgf')
print(zu )

re模块常用方法

#re模块的常用方法
search() # 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
findall() # 搜索字符串,以列表类型返回全部能匹配的子串
finditer() # 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
sub() # 替换 类似于字符串中 replace() 方法
compile() # 编译正则表达式为模式对象
re.split() # 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 #获取 match对象 中的信息
group() # 返回匹配到的字符串
start() # 返回匹配的开始位置
end() # 返回匹配的结束位置
span() # 返回一个元组表示匹配位置(开始,结束)

example:


#eg1
re.search('a','abc')
#eg2
re.search('.','ab.cd.ce')


#正则元字符
# . ^ $ * + ? {} [] \ | ()


#eg3
re.search('\bs\b','abcd s w')
re.search(r'\bs\b','abcd s w')


#eg4
re.search(r'.','hc')
re.search(r'.','\nhc')


'''
\d 匹配0~9的数字
\s 匹配任意的空白符,包括空格,制表符(Tab),换行符等
\w 匹配字母或数字或下划线或汉字等
\b 表示单词的边界
\. 表示匹配点号本身
\D、\S、\W、\B是与小写的相反的作用
\D除啦数字以外的字符


^ 脱字符,匹配输入字符串的开始的位置
$ 匹配输入字符串的结束位置
'''


#eg.
re.search(r'\d','ab12')
re.search(r'\s','ab 12')
re.search(r'\w','ab 12')
re.search(r'\w','\ab 12')
re.search(r'\w',r'\ab 12')
re.search(r'\bc\b','abcc c 12')
re.search(r'\b#\b',r'abcc # 12')


re.search(r'\D','abc123')
re.search(r'\.','abc.123')


re.search(r'^a','abc.123')
re.search(r'^b','abc.123')
re.search(r'3$','abd.123')


#{} 次数
re.search(r'\d{1,3}','12ab23')
re.findall(r'\d{1,3}','12ab233')
re.findall(r'\d{1,3}','12ab234567')
re.findall(r'\d{1,3}','12ab234567890')


re.findall(r'\d{1,}','12ab234567890')
re.findall(r'\d{0,}','12ab234567890abc')
re.findall(r'\d{0,3}','12ab234567890abc1')
re.findall(r'\d{,3}','12ab234567890abc1')
re.findall(r'\d{3}','12ab234567890abc1')


re.findall(r'\d*','12ab234567890abc1') #{0,}
re.findall(r'\d+','12ab234567890abc') #{1,}
re.findall(r'\d?','12ab234567890abc') #{0,1}


re.findall(r'\d*?','12ab234567890abc')
re.findall(r'\d{0,0}','12ab234567890abc')


re.findall(r'\d+?','12ab234567890abc')
re.findall(r'\d{1,1}','12ab234567890abc')


'''
* + 被称为贪婪模式
? 被称为懒惰模式
只要加?之后,{n,m}里面就变成{n,n}
'''


#[]


re.findall(r'[\d]','12ab23344')
re.findall(r'[ab]','12ab23344')
re.findall(r'[a|b]','12ab23344')


re.findall(r'[.?*(){}]','12ab.?*(){}23344')
re.findall(r'[0-9]','12ab.?*(){}23344')
re.findall(r'[^\d]','12ab.?*(){}23344') # 这里 ^ 是取反的意思 脱字符


#()


re.findall(r'(23)','12ab.?*(){}23344')
re.findall(r'(2|3)','12ab.?*(){}23344')
re.findall(r'1(2|3)','12ab.?*(){}23344')
re.findall(r'(\d)','12ab.?*(){}23344')
re.findall(r'(^\d)','12ab.?*(){}23344')


#re模块
a = re.compile(r'\d')
a.findall('123ab12')
re.findall(r'\d','123ab12')


re.sub('i','o','pythin',1)
'pythin'.replace('i','o',1)


re.split(r'\s','agg bbw cee')
re.split(r'[\s|,]','agg bbw, cee')
re.split(r'\d','c1e3e')


re.match(r'\d','1223ag')
re.match(r'\d','ab1223ag')
re.match(r'g$','ab1223ag')


c = re.search(r'[2|3]','12ab1223ag')
c.group()
c.start()
c.end()
c.span()

#finditer()    # 搜索字符串,返回一个匹配结果的迭代类型,
# 每个迭代元素是match对象 s = 'sjianengsdfasjianeng15sadfjianeng666'
finditer = re.finditer('jianeng',s)
print(finditer )
for i in finditer:
print(i)
print(i.group())
print(i.start() )
print(i.end() )
print(i.span() ) #sub() # 替换 类似于字符串中 replace() 方法
s2 = re.sub('jianeng','',s,count=2)
print(s2) # compile() # 编译正则表达式为模式对象
a = re.compile('jianeng') # a 要匹配jianeng
dd='fsadfasfjkjianeng'
b = a.findall(dd)
print(b ) #re.split() # 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
c = re.split('jianeng',s,maxsplit=2)
print(c)

2.作业

现在要求大家定义这样的一个类:
1.这个类,必须含有字符串的所有方法
2.同时这个类 ,包含一个统计方法:
  统计输入字符串里,英文字母、空格、数字和其他字符分别出现次数,
  并作为一个字典返回 {'字母': ,'空格': ,'数字': ,'其他字符:' }

import re
class A(str): # 继承str类即可含有字符串所有方法
def counts(self):
# print(self)
num = len(re.findall(r'\d', self))
letter = len(re.findall(r'[a-zA-Z]', self))
# print(re.findall(r'[a-zA-Z]', self))
space = len(re.findall(r'\s', self))
other = len(self) - num - letter - space
count_number = {"num":num,"letter":letter,"space":space, "other": other}
return count_number
string = A('My name is Which,age18')
# print(string)
# print(string.upper())
print(string.counts())
# s = 'hello'
# s.upper()

13.常见模块re-正则模块的更多相关文章

  1. python--------------常用模块之正则

    一.认识模块  什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.py文件 ...

  2. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  3. python_way day6 反射,正则 模块(进度条,hash)

    python_way day6 反射 正则 模块 sys,os,hashlib 一.模块: 1.sys & os: 我们在写项目的时候,经常遇到模块互相调用的情况,但是在不同的模块下我们通过什 ...

  4. 小白的Python之路 day5 re正则模块

    re正则模块 一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串 ...

  5. python——re模块(正则表达)

    python——re模块(正则表达) 两个比较不错的正则帖子: http://blog.csdn.net/riba2534/article/details/54288552 http://blog.c ...

  6. 常用的re模块的正则匹配的表达式

    07.01自我总结 常用的re模块的正则匹配的表达式 一.校验数字的表达式 1.数字 ^[0-9]\*$ 2.n位的数字 ^\d{n}$ 3.至少n位的数字 ^\d{n,}$ 4.m-n位的数字 ^\ ...

  7. python基础语法13 内置模块 subprocess,re模块,logging日志记录模块,防止导入模块时自动执行测试功能,包的理论

    subprocess模块: - 可以通过python代码给操作系统终端发送命令, 并且可以返回结果. sub: 子    process: 进程 import subprocess while Tru ...

  8. 模块 re_正则

    模块re_正则 讲正题之前我们先来看一个例子:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/ 这是京东的注册页面,打开页面我 ...

  9. Python全栈开发【re正则模块】

    re正则模块 本节内容: 正则介绍 元字符及元字符集 元字符转义符 re模块下的常用方法 正则介绍(re) 正则表达式(或 RE)是一种小型的.高度专业化的编程语言. 在Python中,它内嵌在Pyt ...

随机推荐

  1. jQuery 属性操作方法

    方法 描述 addClass() 向匹配的元素添加指定的类名. attr() 设置或返回匹配元素的属性和值. hasClass() 检查匹配的元素是否拥有指定的类. html() 设置或返回匹配的元素 ...

  2. 使用shell脚本守护node进程

    现在开源的守护node进程的包有不少,比如forever,pm2,这里我就不再赘述了. 但是有的公司生产服务器是不能联网的,而这些包都需要全局安装,必须要网络环境.难道你nohup node app. ...

  3. ios . -- UICollectionView --cell 自适应

    #pragma mark — 视图控制器中使用:(关键) layout.estimatedItemSize = CGSizeMake(WIDTH, ); // layout约束这边必须要用estima ...

  4. 安装使用yarn,使用国内镜像加速npm和yarn

    安装yarn https://yarnpkg.com/lang/zh-hans/docs/install/ 使用国内镜像加速npm和yarn 1. npm config set registry=ht ...

  5. 最详细的PHP flush()与ob

    buffer ---- flush()buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页.主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区 ...

  6. 【BZOJ1930】[Shoi2003]pacman 吃豆豆 最大费用最大流

    [BZOJ1930][Shoi2003]pacman 吃豆豆 Description 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会 ...

  7. 【BZOJ3502/2288】PA2012 Tanie linie/【POJ Challenge】生日礼物 堆+链表(模拟费用流)

    [BZOJ3502]PA2012 Tanie linie Description n个数字,求不相交的总和最大的最多k个连续子序列. 1<= k<= N<= 1000000. Sam ...

  8. IIPP迷你项目(二)"Guess the Number!"

    本来这个程序是早就编完了的,一直没时间发布博客.时至今日已时隔多天,也算是复习一下事件驱动型编程的过程吧. 1 事件驱动型编程 本质上这次的作业是披着猜数字皮的图形化界面编程,好在 simplegui ...

  9. 使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法

    使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法 idea中springboot整合mybatis时,通过@Autowired ...

  10. pycharm中格式标准化代码

    点击之后,可以使代码标准化