RE模块和正则表达式

正则表达式

正则就是用来筛选字符串中的特定的内容的(只要是reg...一般情况下都是跟正则有关)

re模块与正则表达式之间的关系:
       正则表达式不是python独有的 它是一门独立的技术
       所有的编程语言都可以使用正则
       但是如果你想在python中使用,你就必须依赖于re模块

正则表达式的测试工具:http://tool.chinaz.com/regex/

#字符组 : [字符组]
#在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
#字符分为很多类,比如数字、字母、标点等等。一个字符串里面的表达式都是或的关系 #^ #匹配的是字符串的开头,例如:^a 就是匹配以a开头的
#[^] # 除了[]写的字符,其它都要 #$ #匹配的是字符串的结尾,例如:b$ 就是匹配以b结尾的 #^与$连用,会精准限制匹配的内容,两者中间些什么,匹配的字符串就必须是什么,多一个少一个都不行 #| #例如a|b就是字符a或者字符b,需要注意一定要将长的放在前面
#.  #匹配除换行符以外的任意字符
#() # 匹配括号内的表达式,也表示一个组 #\w #\s #\d
#\w匹配字母或数字或下划线
#\s匹配任意的空白符
#\d匹配数字 #\W #\S #\D
#\W匹配非字母或数字或下划线
#\S匹配非数字
#\D匹配非空白符
#ps:如果[\w\W]、[\s\S]、[\d\D]这样使用,可以匹配到全部 #\n换行符
#\t制表符
#\b单词以什么结尾

量词必须跟在正则符号的后面,量词只能能够限制紧挨着它的那一个正则符号

分组:针对多个正则表达式,想统一用量词修饰,可以用括号()括起来。

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,正则默认情况下,采用贪婪匹配

非贪婪匹配:可以在量词后面加上?取消默认的贪婪匹配

转义符\:在正则表达式中,有很多有特殊意义的是元字符,比如\n和\s等,如果要在正则中匹配正常的"\n"而不是"换行符"就需要对"\"进行转义,变成'\\'。

RE模块

#身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部有数字组成,首位不能#为0;如果是18位,则前17位全部是数字,末位可能是数字或x,下面我们尝试用正则来表示:

import re
phone_number = input('please input your phone number : ')
if re.match('^[1-9]\d{14}(\d{2}[0-9x])?$',phone_number):
print('是身份证号')
else:
print('不是身份证号')
#正则表达式分析
^[1-9]\d{14}(\d{2}[0-9x])?$
#^[1-9]第一位是1-9中的数字
#\d{14}第二到十四位匹配的是数字
#(\d{2}[0-9x])?$后三位可能出现一次,也可能不出现,出现的时候,后三位的前两位是数字,第三位可以是0-9的数字也可以是x #更清楚的写法
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
#第一位和之前相同
#后面通过|这个符号,也就是或,来进行两种情况的判断如果后面还有17位,则是有16位都是数字,最后一位可以是数字或者x,如果后面是14位,则14位都是数字

RE模块中的常用函数

import re

#findall
res = re.findall('a','eva egon jason')
# findall('正则表达式','带匹配的字符串')
print(res)
# 找出字符串中符合正则表达式全部内容 并且返回的是一个列表,列表中的元素就是正则匹配到的结果
import re

#search
res = re.search('a','eva egon jason')
print(res) # search不会给你直接返回匹配到的结果,而是给你返回一个对象
print(res.group()) # 必须调用group才能看到匹配的结果
"""
注意:
1.search只会依据正则查一次 只要查到了结果 就不会再往后查找
2.当查找的结果不存在的情况下,返回的是一个None 调用group直接报错
""" res1 = re.search('b','eva egon jason')
# search('正则表达式','带匹配的字符串')
if res1:
print(res1.group())
import re
res = re.match('a','eva egon jason')
print(res) # ('正则表达式','带匹配的字符串')
print(res.group())
"""
注意:
1.match只会匹配字符串的开头部分
2.当字符串的开头不符合匹配规则的情况下 返回的也是None 调用group也会报错
"""
import re

ret = re.split('[ab]','abcd')  # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
print(ret) # ['', '', 'cd'] 返回的还是列表 ret = re.sub('\d','H','eva3egon4yuan4',1) # 将数字替换成'H',参数1表示只替换1个
print(ret) # ('正则表达式','新的内容','待替换的字符串',n)
#先按照正则表达式查找所有符合该表达式的内容 统一替换成'新的内容' 还可以通过n来控制替换的个数 ret = re.subn('\d', 'H', 'eva3egon4yuan4') # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
ret1 = re.subn('\d', 'H', 'eva3egon4yuan4',1) # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
print(ret) # 返回的是一个元组 元组的第二个元素代表的是替换的个数
print(ret1) obj = re.compile('\d{3}') #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
res1 = obj.findall('')
print(ret.group()) #结果 : 123
print(res1) #结果 : ['347', '982', '734', '729', '349', '827', '384']
import re
ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器
print(ret) # <callable_iterator object at 0x10195f940>
print(next(ret).group()) # 等价于ret.__next__() 查看第一个结果
print(next(ret).group()) # 等价于ret.__next__() 查看第二个结果
print(next(ret).group()) # 等价于ret.__next__()
print(next(ret).group()) # 等价于ret.__next__()
print(next(ret).group()) # 等价于ret.__next__() 查出迭代取值的范围 直接报错
print([i.group() for i in ret]) #查看剩余的左右结果
import re
res = re.search('^[1-9](\d{14})(\d{2}[0-9x])?$','')
#还可以给某一个正则表达式起别名,起名的格式为 ?P<名字>
res = re.search('^[1-9](?P<password>\d{14})(?P<username>\d{2}[0-9x])?$','')
print(res.group())
print(res.group('password'))
print(res.group(1))
print(res.group('username'))
print(res.group(2))
#findall的优先级查询:
import re ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
print(ret) # ['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 ?:就是告诉它你要拿到全部 ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
print(ret) # ['www.oldboy.com']
ret=re.split("\d+","eva3egon4yuan")
print(ret) #结果 : ['eva', 'egon', 'yuan'] ret=re.split("(\d+)","eva3egon4yuan")
print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan'] #在匹配部分加上()之后所切出的结果是不同的,
#没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
#这个在某些需要保留匹配部分的使用过程是非常重要的。

RE模块(正则)的更多相关文章

  1. Python全栈 正则表达式(re模块正则接口全方位详解)

    re模块是Python的标准库模块 模块正则接口的整体模式 re.compile 返回regetx对象 finditer fullmatch match search 返回 match对象 match ...

  2. Python使用re模块正则式的预编译及pickle方案

    项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...

  3. re模块(正则)

    一, 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法. 在python中,正则内嵌在python中,并通过re模块实现,正则表达模式被编译成一系列 ...

  4. python,re模块正则

    python没有正则需要导入re模块调用.正则表达式是为了匹配字符串,动态模糊的匹配,只要有返回就匹配到了, 没返回就没匹配到,前面是格式后面是字符串 最常用的匹配语法: re.match()#麦驰, ...

  5. 反射,hashlib模块,正则匹配,冒泡,选择,插入排序

    一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数, ...

  6. 常用模块-正则re

    常用模块之正则模块 """ 正则表达式与re模块的关系 1.正则表达式是一门独立的技术,任何语言均可使用 2.python中要想使用正则表达式需要通过re模块 " ...

  7. python3 re模块正则匹配字符串中的时间信息

    匹配时间: # -*- coding:utf-8 -*- import re def parseDate(l): patternForTime = r'(\d{4}[\D]\d{1,2}[\D]\d{ ...

  8. day19 python之re模块正则练习

    1.匹配标签 import re ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>" ...

  9. Python(re模块,正则)

    day18 正则表达式用处? 匹配 字符串 s = 'hello world' print(s.find('llo'))#第一个的位置 ret = s.replace('ll','xx') print ...

  10. re模块与正则

    一.正则 正则就是用来筛选字符串中的特定的内容 正则表达式与re模块的关系: 1.正则表达式是一门独立的技术,任何语言都可以使用 2.python中药想使用正则表达式需要通过调用re模块 正则应用场景 ...

随机推荐

  1. Python 进阶 - 面向对象

    Python 面向对象 面向过程 把完成某个需求的所有步骤,从头到尾逐步实现 根据开发需求,将某些功能独立的代码封装成一个又一个函数 最后完成的代码,就是顺序地调用不同的函数 面向过程特点: 注重步骤 ...

  2. HDU - 4578 线段树+三重操作

    这道题自己写了很久,还是没写出来,也看了很多题解,感觉多数还是看的迷迷糊糊,最后面看到一篇大佬的才感觉恍然大悟. 先上一篇大佬的题解:https://blog.csdn.net/aqa20372995 ...

  3. JavaScript之OOP

    本文介绍下js中OOP的一些用法: 由上图可得: 1.typeof null结果是object,所以需要用与运算符再次判断是否为空. 2.构造器实现重载后,可依序传入参数或传入对象. 由上图可得:要实 ...

  4. windows Apache 配置支持HTTPS的SSL证书

    在设置Apache + SSL之前, 需要做: 安装Apache, 下载安装Apache时请下载带有ssl版本的Apache安装程序. 并且ssl需要的文件在如下的位置: [Apache安装目录]/m ...

  5. 内网部署Docker版本Gitlab

    Gitlab部署: 1. 还原备份文件后记得拷贝gitlab-secrets.json,不然会遇到500错误 2. 下载Docker以及依赖项rpm包 3. 在外网机器下载镜像 a. 拉取——Dock ...

  6. Win10用Windows照片查看程序(照片查看器)打开图片

    以上方法只能一个个添加,也有人说不好使,这里给出一个我写的批处理程序,反正我一直用着很好.   ::复制以下内容到记事本: @echo off&cd\&color 0a&cls ...

  7. Seconds from winning

    英语沙龙 1. Who winned the game? Answer: It was not Paxton who would hoist the winner's trophy. Paxton h ...

  8. springmvc 实现文件上传

    1.添加jar包 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io&l ...

  9. Mongo学习记录

    引子 最近做项目利用mongo记录的日志做数据统计.着了非关系型数据库的迷,于是乎买了本<MongoDB实战>学习了一番.记录一下学习笔记,共享之. 准备 我在自己的Linux服务器上装了 ...

  10. arduino basic issue

    1.    string char Str1[15]; char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; char Str3[8] = {'a', ...