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()

最新文章

  1. 提示框(UIAlertController)的使用。
  2. 学习笔记--Git安装 创建版本库 图文详解
  3. 【v2.x OGE教程 19】 引擎状态控制
  4. ABC: Always Be Coding——程序员面试必
  5. Redhat YUM U盘源配置
  6. react中的坑
  7. UI基础 - UIScrollView
  8. Cortex-M3和Cortex-M4 Fault异常应用之一 ----- 基础知识
  9. GetDirectories 出错的解决方法
  10. OpenStack云平台的网络模式及其工作机制
  11. 【BZOJ1006】神奇的国度(弦图)
  12. App性能测试之启动时间(安卓)手动+脚本
  13. Docker for Windows 代理设置(linux container)
  14. abap对象的创建和调用。方法调用
  15. hive sql 效率提升
  16. Splay模板讲解及一些题目
  17. 细说Request与Request.Params
  18. Meaning of “const” last in a C++ method declaration?
  19. django-url命名空间+反查
  20. MongoDB day01

热门文章

  1. PC如何访问手机网址
  2. KMP hihoCoder1015 KMP算法
  3. PNP与NPN三极管
  4. Linux网络编程(一)基础
  5. poj 3469(网络流模版)
  6. python导入模块报错:ImportError: No module named mysql.connector(安装 mysql)
  7. 谈抽象1——无脑copy等于自杀
  8. 使用Volley缓存图片时,缓存无效的原因。
  9. CodeIgniter 入门教程第一篇:信息发布
  10. coursera 《现代操作系统》 -- 第九周 文件系统(1)