正则:

regular expression

常用的场景:

#正则的包

>>> import re

#match:开头匹配,匹配到,返回一个匹配对象,否则返回None

>>> re.match("abc","abcd")
<_sre.SRE_Match object; span=(0, 3), match='abc'>#返回的时一个匹配对象,要想查看匹配的内容用group(),search也是

>>> result =re.match(r"\d","dbja1")
>>> type(result)
<class 'NoneType'>
>>>

#\d(digit):匹配所有的数字
>>> re.match("\d","1abcd")
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> re.match("\\d","1abcd")
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> re.match(r"\d","1abcd")#加r,防止在文件里转译出错
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>>

#search:从任意位置找到第一个,只返回第一个匹配到的

>>> re.search(r"\d","acb3ad")
<_sre.SRE_Match object; span=(3, 4), match='3'>
>>>

>>> re.search(r"\d","acb3ad3l3sd4")
<_sre.SRE_Match object; span=(3, 4), match='3'>
>>>

#findall:找到所有匹配的内容放到一个列表里,匹配不到时返回一个空的列表。

>>> re.findall(r"\d","a1b2c3")
['1', '2', '3']
>>>

>>> re.findall(r"\d","abc")
[]
>>>

>>> result =re.findall(r"\d","a1b2c3")
>>> result
['1', '2', '3']
>>>

#想查看匹配到的内容用group()

>>> result =re.match(r"\d","2bg")
>>> result.group()
'2'
>>> result
<_sre.SRE_Match object; span=(0, 1), match='2'>
>>> result =re.search(r"\d","d2bg")
>>> result
<_sre.SRE_Match object; span=(1, 2), match='2'>
>>> result.group()
'2'
>>> result =re.search(r"\d","dbg")
>>> result
>>> result.group()#注意:没有匹配到内容时不能用group
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>

#compile编译正则表达式,存到一个变量里方便复用

>>> pattern =re.compile(r"\d")
>>> type(pattern)
<class '_sre.SRE_Pattern'>
>>> pattern.match("1ab")
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> pattern.search("dd1ab")
<_sre.SRE_Match object; span=(2, 3), match='1'>
>>> pattern.search("dd1ab").group()
'1'
>>>

>>> s=input("请输入一些内容:")
请输入一些内容:I am ok!
>>> if re.search(r"ok",s):
...     print(True)
... else:
...     print(False)
...
True
>>> s=input("请输入一些内容:")
请输入一些内容:aaaaa
>>> if re.search(r"ok",s):
...     print(True)
... else:
...     print(False)
...
False
 
 
 
\d\D:digit,匹配数字,非数字,大写表示取反
>>> re.search(r"\d","rw3e").group()
'3'
>>> re.search(r"\D","rw3e").group()
'r'
>>>
 
\w\W:word 匹配所有的字母和数字,非字母非数字;

[a-zA-Z_0-9]
>>> re.search(r"\w","  a").group()
'a'
>>> re.search(r"\w","  a").group()
'a'
>>> re.search(r"\w","  1").group()
'1'
>>> re.search(r"\W","_  1").group()
' '
>>> re.search(r"\W","_").group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.search(r"\W","@").group()
'@'
>>> re.search(r"\W","!!@").group()
'!'
>>>
 
 
 \s\S:space  匹配所有的空白,非空白
 >>> re.search(r"\s","\t").group()
'\t'
>>> re.search(r"\s"," ").group()
' '
>>> re.search(r"\S","  ! ").group()
'!'
>>>
 
 
量词:+,*,{m,n}
+:表示匹配一个或多个内容 ,

尽量多的配置,

正则表示式的贪婪性
>>> re.search(r"\d+","abc123 1").group()
'123'
>>> 
>>> re.search(r"\s+","\r\t\n 1").group()#+,正则的贪婪性,尽可能多的匹配
'\r\t\n '
>>> re.search(r"\s+?","\r\t\n 1").group()#?,抑制贪婪性,尽可能少的匹配
'\r'
>>>
 
 *:匹配0个或多个
 >>> re.search(r"\d*","we333").group()
''
>>> re.search(r"\d","we333").group()
'3'
>>>
 
 {}:指定匹配次数
>>> re.search(r"\d{3}","12  123  34").group()
'123'
>>> re.search(r"\d{1,3}","12  123  34").group()
'12'
>>> 
 
?:表示匹配0次或一次
>>> re.search(r"\d?","123a").group()
'1'
>>> re.search(r"\d?","dd123a").group()
''
>>>
>>> re.findall(r"\d?","ff2123a")
['', '', '2', '1', '2', '3', '', '']
>>>
 
.匹配除空格之外的所有字符
>>> re.search(r"a.b","a1b").group()
'a1b'
>>>
 
 
抑制贪婪性
>>> re.search(r"a.*b","a1  db   123b").group()
'a1  db   123b'
>>> re.search(r"a.*?b","a1  db   123b").group()
'a1  db'
>>>
 
 
 
 总结:
match
search
findall
re.complie
group
\d\D
\w\W
\s\S
* + . ?
{m,n}
 
\w      匹配字母数字及下划线
\W      匹配f非字母数字下划线
\s      匹配任意空白字符,等价于[\t\n\r\f]
\S      匹配任意非空字符
\d      匹配任意数字
\D      匹配任意非数字
\A      匹配字符串开始
\Z      匹配字符串结束,如果存在换行,只匹配换行前的结束字符串
\z      匹配字符串结束
\G      匹配最后匹配完成的位置
\n      匹配一个换行符
\t      匹配一个制表符
^       匹配字符串的开头
$       匹配字符串的末尾
.       匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[....]  用来表示一组字符,单独列出:[amk]匹配a,m或k
[^...]  不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
*       匹配0个或多个的表达式
+       匹配1个或者多个的表达式
?       匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n}     精确匹配n前面的表示
{m,m}   匹配n到m次由前面的正则表达式定义片段,贪婪模式
a|b     匹配a或者b
()      匹配括号内的表达式,也表示一个组

python正则表达式中的特殊字符:

^          表示匹配的字符必须在最前边

$          表示匹配的字符必须在最后边

*          匹配* 前面的字符0次或n次

+          匹配+ 前面的字符1次或n次

?          匹配?前面的字符0次或1次

.           (小数点)匹配除换行符外的所有字符
(x)        匹配x并记录匹配的值

x|y       匹配x或者y

{n}       这里n是一个正整数。匹配前面的n个字符

{n,}   这里n是一个正整数。匹配至少n个前面的字符

{n,m} 这里n和m都是正整数。匹配至少n个、最多m个前面的字符
[xyz]      字符列表,匹配表中的任一字符,可以通过连接字符 - 指出字符范围,如 [a-z] 表示所有小写字符

[b]        匹配一个空格

b           匹配一个单词的分界线,比如一个空格

B          匹配一个单词的非分界线

re模块匹配规则(re.match函数的第三个参数):

re.IGNORECASE       忽略文中的大小写

re.LOCALE                  处理字符集本地化

re.MULTILINE             是否支持多行匹配

re.DOTALL                  匹配一些特殊标记,例如使用.匹配\n等字符

re.VERBOSE              忽略正则表达式中的空格或者换行等字符

re.UNICODE              使用Unicode编码

 
 

python学习笔记----正则表达式的更多相关文章

  1. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

  2. Python学习笔记——正则表达式入门

    # 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...

  3. python学习笔记——正则表达式regex

    1 概述 1.1 定义 本质是由一系列字符和特殊符号组成的字串,用来表示一定规则的某一类字符串. 1.2 特点 正则表达式是一个独立的技术,其在多种编程语言中使用. 在python语言中的正则表达式模 ...

  4. Python学习笔记——正则表达式

    今天把之前学的正则表达式好好总结总结. 一.元字符 . :  .表示可以匹配任意一个字符 \d  :  \d表示可以匹配任意一个数字 \D  : \D表示可以匹配任意一个非数字 \s  :  \s表示 ...

  5. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  6. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  7. Python学习笔记,day5

    Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...

  8. 【目录】Python学习笔记

    目录:Python学习笔记 目标:坚持每天学习,每周一篇博文 1. Python学习笔记 - day1 - 概述及安装 2.Python学习笔记 - day2 - PyCharm的基本使用 3.Pyt ...

  9. Python 学习笔记(上)

    Python 学习笔记(上) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(上) 基础知识 基本输入输出 模 ...

随机推荐

  1. Windows L2TP Client Setup

    原文链接:http://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/4.Wind ...

  2. 配置django项目总结

    1.在django项目应用文件夹中的models.py文件中导入(1)from django.db import models(2)建立需要的映射的类名和属性类型也就是数据库中的表名和字段名 2.在s ...

  3. 我发起并创立了一个 EPWA 的 开源项目

    EPWA ,  是  Easy PWA  的 意思, PWA 取自于 Google 的 PWA, EPWA   是一个用   C#  Cef  Html  js  css   开发 桌面程序 的 架构 ...

  4. C# CRC - 16

    using System; static class Program { static void Main() { string input = "8000"; var bytes ...

  5. QPainter绘制遇到的小问题

    1.Qt绘图基础 (1)绘图需画笔和画布: QPainter 相当于Qt中的一个画笔,绘制时需要一块画布, Qt中扮演画布角色的组件为QPaintDevice和他的各个子类,如: QWidget, Q ...

  6. Django的安装和启动以及第一个工程的建立

    ---恢复内容开始--- 前提:已经安装了python和Anaconda (windows系统) 在Anaconda安装好之后,其文件夹下有一个叫做Anaconda Prompt的工具,类似windo ...

  7. UML 资料整理

    参考:http://www.uml.org.cn/oobject/201211231.asp 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有 ...

  8. eclipse项目上传服务器注意事项

    1.先准备服务器环境 2 数据库导入,tomcat安装 3 开放服务器端口,配置网络 4.修改本地代码修改为发布版本,即ip,账号密码数据库等 5 变动的信息应该写在配置文件或者一个全局产量中,这样才 ...

  9. python 函数内使用自己的函数名

    def p(): import sys print sys._getframe(1).f_code.co_name def f(): p() def f1(): p() if __name__ == ...

  10. WEB 性能优化导图

    看了一下网上对于web性能优化的一些帖子,不是很直观,花了点时间画了一个思维导图. refers: https://segmentfault.com/a/1190000011936772 https: ...