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. Sublime Text加上Eclipse

    打造属于自己的前端开发神器 -- 给Sublime Text加上Eclipse的光环     将Sublime Text打造成如Eclipse一般的前端开发IDE 1. 快捷键移植篇   从Java开 ...

  2. vim创建新的命令

    转自:http://man.chinaunix.net/newsoft/vi/doc/usr_5F40.html#usr_40.txt *40.1* 键映射 简单的映射已经在 |05.3| 介绍过了. ...

  3. 洛谷P1970 花匠(dp)

    题意 题目链接 Sol 直接用\(f[i][0/1]\)表示到第\(i\)个位置,该位置是以上升结尾还是以下降结尾 转移的时候只需枚举前一个即可 #include<cstdio> #inc ...

  4. 关于Android那些事

    1.开发Activity步骤 第一步:写一个类继承Activity 第二步:重写oncreate方法 第三步:在主配置文件中注册activity <activity android:name=& ...

  5. JavaScript入门几个概念

    JavaScript入门几个概念 刚刚入门JavaScript的时候,搞懂DOM.BOM以及它们的对象document和window很有必要. DOM是为了操作文档出现的API,document是它的 ...

  6. dhtml

    网页换肤:<div> <button>red</button> <button>blue</button> <button>bl ...

  7. SharePoint 2013 - Upgrade

    1. 升级到SP2013时,需要对data connection文件(UDCX文件)进行修改: 1. Mark all UDCX File (Ctrl + A) and open them. 2. F ...

  8. SCI收录的期刊查询

    SCI   收录的期刊查询(动态) 1.Science Citation Index (SCI)收录期刊查询地址:http://www.isinet.com/cgi-bin/jrnlst/jlopti ...

  9. 关于maven包的引入net.sf.json的问题

    最开始通过在pom.xml文件中加入 <dependency> <groupId>net.sf.json-lib</groupId> <artifactId& ...

  10. 在linux环境下搭建java web测试环境(非常详细!)

    一.项目必备软件及基本思路 项目必备:虚拟机:VMware Workstation (已安装linux的 CentOS6.5版本) 项目:java web项目 (必须在本地部署编译后选择项目的webR ...