Python-正则表达式

简介:

一.正则表达式
       正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。


1.基本模式
字面模式: 就是字面长量,就代表其本身
  . 匹配任何字符
  \w 匹配一个字母、数字、下划线

  \W 匹配非字母、数字、下划线

  \s 匹配空白  

  \S 匹配非空白字符
  \d 匹配数字
  ^ 开头  

  $ 结尾
  \ 转义字符

wKioL1m1GujziG-tAAA2dmj2oNU022.png


wKiom1m1G5eCDWGNAAA2S0igmNI501.png

元字符:
   [[:digit:]]
   [[:upper:]]
通配符:^,$,[]  , ^和$在[]中不代表以什么开头以什么结尾的意思
   *
   ?
   $,^
   []

2.次数的匹配 , 匹配其前面的字符出现的次数 :
* 0 次或多次
+ 一次或多次
? 零次或一次

{n}              代表重复n次
{m,n}          代表重复m次到n次
{0,}             重复0次到无穷大,*
{1,}             重复1次到无穷大,+
{0,1}           重复0次或一次,?


3.中括号
中括号用于指向一个字符集合
中括号可以使用元字符
中括号中的. 表示其字面意思

[a-z] [A-Z] [0-9] [A-Za-z]

[0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线;
[0-9a-zA-Z\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串;
[a-zA-Z\_][0-9a-zA-Z\_]{0, 19} 更精确地限制了变量的长度是 120个字符;

A|B 可以匹配 A 或 B
^\d 表示必须以数字开头
\d$ 表示必须以数字结束

wKioL1m1G7fSCsN3AAAdouSn8bs405.png


练习: 检验变量名是否合法?

wKiom1m1HFHAozKeAABl4kUvKe0215.png


思考
判断一个字符串是否是合法的 Email 的方法;

判断满足029-1234567这样要求的电话号码的方法;


myre = r"^010-{0,1}\d{8}"    可以写成 myre = r"^010-?\d{8}"

re.findall(myre,s)



二.re 模块
r = r'hello'
re.match(r, 'hello')
re.match(r, 'westos')
match() 方法判断是否匹配,如果匹配成功,返回一个 Match对象,否则返回 None 。


分组
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
m.group(0)
m.group(1)
m.group(2)

wKioL1m1IkjBThUlAAD3zee41NU518.png




贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符
>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')


注:
\d+ 采用贪婪匹配,直接把后面的 0 全部匹配了,结果 0* 只能匹配空字符串



\d+ 采用贪婪匹配,直接把后面的 0 全部匹配了,结果 0* 只能匹配空字符串必须让 \d+ 采用非贪婪匹配(也就是尽可能少匹配),才能把后面的 0 匹配出来,加个 ? 就可以让 \d+ 采用非贪婪匹配


三.编译
当我们在 Python 中使用正则表达式时,re 模块内部会干两件事情:
1. 编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
2. 用编译后的正则表达式去匹配字符串。
重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式。


编译
r = r'hello'
r_compile = r.compile(r)
r_compile .match()


myre = r"^010-?\d{8}"
comR = myre.compile(myre)
re.findall(comR,s)
re.finditer(comR,s)


练习
基础版:有一个日志文件access.log,统计访问前十的 IP 地址和访问次数。
升级版:有多个日志文件access.log,统计访问前十的 IP 地址和访问次数。



四.总结

re.match(p,text) :p 为正则表达式模式, text 要查找的字符串,会返回一个match 对象
re.search(p,text) : 只要在 text 中匹配到了 p 就返回,只返回第一个匹配到的
re.findall(p,text) :将能匹配上的全返回,会返回一个 list
re.split(p,text) : 按照 p 匹配,并且以匹配到的字符为分隔符切割 text, 返回一个切割后的 list(s.split() )

re.sub(p,s,text) : 替换,将 p 匹配到的字符替换为 s.    (相当于s.replace())
pattern = re.compile(p) 先编译 p 模式,当正则表达式模式比较复杂的时候,会先编译,然后再使用





      本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1964142,如需转载请自行联系原作者










相关文章
|
1月前
|
编译器 Python
Python正则表达式的7个使用典范(推荐)
Python正则表达式的7个使用典范(推荐)
24 0
|
1月前
|
Python
Python实现正则表达式匹配。
【2月更文挑战第11天】【2月更文挑战第30篇】Python实现正则表达式匹配。
|
1月前
|
Python
请解释Python中的正则表达式以及如何使用它们进行文本处理。
请解释Python中的正则表达式以及如何使用它们进行文本处理。
9 0
|
1月前
|
机器学习/深度学习 Python
请解释Python中的正则表达式是什么?并举例说明其用法。
【2月更文挑战第26天】【2月更文挑战第86篇】请解释Python中的正则表达式是什么?并举例说明其用法。
|
1月前
|
缓存 数据安全/隐私保护 Python
Python快速入门:类、文件操作、正则表达式
Python快速入门:类、文件操作、正则表达式
C4.
|
1月前
|
Python
Python正则表达式
Python正则表达式
C4.
14 1
|
1月前
|
Python
在Python中,如何使用`regex`库进行正则表达式匹配?
在Python中,如何使用`regex`库进行正则表达式匹配?
16 0
|
2月前
|
开发者 Python
Python中的正则表达式:re模块详解与实例
Python中的正则表达式:re模块详解与实例
|
2月前
|
数据格式 Python
Python中的正则表达式:基础与应用
Python中的正则表达式:基础与应用
|
3月前
|
人工智能 Python
【Python 30天速成计划】8:正则表达式
【Python 30天速成计划】8:正则表达式

热门文章

最新文章