正则:

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. parrotsec 和 kali安装系统的时候出现“executing grub-install dummy”的解决方案

    在物理机的环境下安装系统出现点问题,弄了好一会才弄出解决方法 1.parrot和kali安装的时候出现了无efi分区不能继续的问题,要知道我之前安装的时候一直都是\ ; 内存; \home三个分区搞定 ...

  2. [工作积累] NBA 2K16 mobile终于发布了

    忙了大半年, 终于出来了. iOS: https://itunes.apple.com/us/app/nba-2k16/id984732818?mt=8 Android: https://play.g ...

  3. openstack--10--知识点补充

    关于uuid和Fernet方式比较 提供令牌有四种方式[fernet|pkiz|pki|uuid]默认是uuid.

  4. Linux updatedb命令详解

    Linux updatedb命令 updatedb 命令用来创建或更新 locate 命令所必需的数据库文件. updatedb 命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文 ...

  5. 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置

    Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...

  6. JSON AST 生成MD

    使用 JsonLite 获取 JSON  AST class Program { static void Main(string[] args) { string fileName = $" ...

  7. 微软AD相关操作的免费工具

    https://www.ittsystems.com/best-free-active-directory-tools/

  8. bat文件与Vbs文件常用操作(获取用户输入,执行VBS文件)

    bat文件: set /P StrInput="输入数字:" echo 输入的数字为%StrInput% set /P Flg="是否执行(y/n):" IF ...

  9. python-setuptool安装

    安装setuptools时报error: ”RuntimeError: Compression requires the (missing) zlib module“ 解决办法: yum安装zlib和 ...

  10. 爬虫系列2:Requests+Xpath 爬取租房网站信息

    Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...