1,正则表达式

正则表达式是用来做字符串的匹配的,正则有他自己的规则,和python没有关系,一种匹配字符串的规则。

2,字符组

在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示。
字符分为很多类,比如数字、字母、标点等等。
假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。3,检索输入的手机号是否合法
#检测输入的手机号是否合法
while True:
    phone_number = input('please input your phone number : ')
    if len(phone_number) == 11 \
            and phone_number.isdigit()\
            ') \
            ') \
            ') \
            ')):
        print('是合法的手机号码')
    else:
        print('不是合法的手机号码')

4,换一种方法:调用re模块来检测手机号是否合法

import re
phone_number = input('please input your phone number : ')
if re.match('^(13|14|15|18)[0-9]{9}$',phone_number):
        print('是合法的手机号码')
else:
        print('不是合法的手机号码')

5,正则表达式规则

字符:

量词

6,转义符转义符在python和正则表达式当中有着特殊的含义,如:\n,在python中表示换行符,如果想单纯的输出\n直接输出是没办法实现的。下边就是一些实现输出转义符的方法。

转义符
正则 带匹配字符 匹配结果 说明
\n \n False
因为在正则表达式中\是有特殊意义的字符,所以要匹配\d本身,用表达式\d无法匹配
\\n \n True
转义\之后变成\\,即可匹配
\\\\n \\n True
如果在python中,字符串中的'\'也需要转义,所以每一个字符串'\'又需要转义一次
r'\\d' r'\d' True
在字符串之前加r,让整个字符串不转义

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

7,贪婪匹配

1)什么是贪婪匹配?

在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配。如:*,重复零次或更多次,默认为贪婪匹配,所以会默认匹配更多次,更不是零次。

正则 待匹配字符 匹配结果 说明
<.*> <script>...<script> <script>...<script>
默认为贪婪匹配模式,会匹配尽量长的字符串
<.*?> r'\d' <script>
<script>
加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串

2)?的在正则中的用法总结:

量词:匹配零次或一次
放在量词之后:惰性运算
放在分组里:取消分组优先
3)几个常用的非贪婪匹配Pattern
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

8,re模块的常用方法

findall返回所有匹配结果放在列表中
findall('前面放药查找的内容','这里放被查找的内容')
 
search从前往后找到一个就返回,且返回一个结果的对象(变量),返回的变量需要调用.group()获取结果。,没有就返回None,调用group()会报错
search('前面放要查找的内容','这里放被查找的内容')
 
match和search的用法完全一样,match是从头开始匹配,如果正则规则从头开始找一个可以匹配上,就返回一个变量。匹配的内容需要用group才能显示,没有匹配上就返回None,调用match会报错。
match(‘前面放要查的内容’,‘这里放被查找的内容’)
 
split根据正则关系进行split。
split('正则规则','被替换内容')
ret=re.split("\d+","eva3egon4yuan")
print(ret) #结果 : ['eva', 'egon', 'yuan']

加分组之后:

ret=re.split("(\d+)","eva3egon4yuan")
print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan']
 
sub:替换
sub('正则规则','替换的内容',‘被替换的内容’,替换数量)
 
subn
(‘正则规则’,‘替换的内容’,‘被替换的内容’)
#返回的结果是(‘正则规则’,‘替换的内容’,‘被替换的内容’,替换次数)
 
finditer('正则规则',‘被查找内容’)
#返回一个存放匹配结果的迭代器
对于finditer和split来说,如果他们的正则表达式中有分组,分组内容优先
9,flags

flags有很多可选值:

re.I(IGNORECASE)忽略大小写,括号内是完整的写法
re.M(MULTILINE)多行模式,改变^和$的行为
re.S(DOTALL)点可以匹配任意字符,包括换行符
re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用
re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释

flags

python:正则模块的更多相关文章

  1. 认识python正则模块re

    python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...

  2. 19 Python 正则模块和正则表达式

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

  3. Python——正则模块

    1.re模块是用来操作正则表达式 2.正则表达式——用来字符串匹配的 (1)字符组:[字符组]  例如[0123fdsa456*/-] [0-9] 等同于[0123456789] [a-z] 匹配小写 ...

  4. Python正则模块

    re模块 import re # match # 从头开始匹配, 只匹配一次,就结束 a = re.match('\d+', '54:58天5488:8451') # 默认就是0个群组 print(a ...

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

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

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

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

  7. Python 正则处理_re模块

    正则表达式 动机 文本处理成为计算机常见工作之一 对文本内容搜索,定位,提取是逻辑比较复杂的工作 为了快速方便的解决上述问题,产生了正则表达式技术 定义 文本的高级匹配模式, 提供搜索, 替换, 本质 ...

  8. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

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

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

随机推荐

  1. Angular4+NodeJs+MySQL 入门-05 接口调用

    接口调用 今天讲一下,如果在前端页面上通过调用后台接口,返回来的数据.把前面的几章结合起来. 这里所有用的代码在 https://github.com/xiaotuni/angular-map-htt ...

  2. linux_api之进程环境

    本篇索引: 1.引言 2.main函数 3.进程的终止方式 4.exit和_exit函数 5.atexit函数 7.环境表 8.C程序程序空间布局 9.存储空间的手动分配 10.库文件 1.引言 一个 ...

  3. pat1006. Sign In and Sign Out (25)

    1006. Sign In and Sign Out (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  4. HDU 5289——Assignment——————【RMQ+优化求解】

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. jgrid 选择器 C#控件

    一.RadioButtonList html代码: <asp:RadioButtonList ID="rlPlan" runat="server" Rep ...

  6. could not find an installed version of gradle either in android studio

    问题描述: 很多人在Ionic升级到3之后,无缘无故发现,当我们添加android平台后,build或者run的时候,命令行窗口给我们提示: 如果在Ionic2时add的android platfor ...

  7. javascript动态添加表格以及获取数据

    <script type="text/javascript"> var dict = { '百度': 'http://wwww.baidu.com', '新浪': 'h ...

  8. 05.if结构

    分支结构:if  if-else 选择结构:if else-if switch-case 循环结构:while do-while for foreach if语句 语法: if(判断条件) { //要 ...

  9. 1.net平台

    .net/dotnet:一般指的是.Net Framework框架,是一种平台,一种技术.   .net Framewoek框架是.net平台不可缺少的一部分,它提供了一个稳定的运行环境来保证.net ...

  10. 【Q】类和对象:游戏角色开发(角色介绍)

    案例情景:某公司要开发新游戏,请用面向对象的思想设计英雄类.怪物类和武器类. 编写测试类,创建英雄对象.怪物对象和武器对象,并输出各自的信息. 其中设定分别如下: 1.英雄类 属性:英雄名字.生命值. ...