正则:

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. RXJS 实例操作符

    先来了解几个新名词: Observable : 可观察对象,是一组值或事件的集合 Observer : 观察者,回调函数集合 Subscription :Observable动作执行者 Operato ...

  2. Vue 中 diff 算法后更新 DOM 的方法

    vue 2.0加入了 virtual dom,在 node_modules\vue\src\core\vdom\patch.js 中会对虚拟 DOM 进行 diff 算法等,然后更新 DOM. 网上的 ...

  3. ECharts 从后台动态获取数据 (asp.net)

    (一) 使用工具 visual studio 2017:Web开发:asp.net (代码中的js引用路径以及ajax方法调用的url,记得修改哦) (二) 准备工作(此处写给和我一样小白) 1.动态 ...

  4. Java工程师可以从事的几大职业

    在重庆,程序员一直被认为是高薪职业,Java作为最受欢迎的语言,是很多初入行的人都会选择的方向.那么学习之后可以从事哪些工作呢?下面小编就给大家介绍一下. 一.大数据技术 Hadoop以及其他大数据处 ...

  5. flagr 数据库配置

    flagr 是一个很不错的特性开关.a/b 测试服务,默认使用的是sqlite 数据库,但是我们可以通过配置,使用不同的数据库 sqlite.mysql.postrgresql.json_file.j ...

  6. git 放弃本地修改,强制拉取更新

    开发时,对于本地的项目中修改不做保存操作(或代码改崩),可以用到Git pull的强制覆盖,具体代码如下: git fetch --all git reset --hard origin/master ...

  7. cannal&otter源码解析

    一点引用资料的整理 http://www.tianshouzhi.com/api/tutorials/canal/381 canal 同步工具 https://github.com/alibaba/c ...

  8. pandas第一课

    pandas第一课 首先是数据的准备 movies.dat user.dat ratings.dat 注意,这些数据都是通过::来隔开每一列的,每一列有各自的含义 现在通过pandas来读入数据 首先 ...

  9. CentOS7用yum快速搭建LAMP平台

    实验环境: [root@nmserver-7 html]# cat /etc/redhat-release CentOS release 7.3.1611 (AltArch) [root@nmserv ...

  10. ES - dynamic field mapping

    Dynamic field mapping 1.我们向es提交一个json对象进行索引,es会对json字段和索引字段进行字段类型适配. 规则如下: 2.string字段的转换规则 当date det ...