就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

字符匹配(普通字符,元字符):

1 普通字符:大多数字符和字母都会和自身匹配
              >>> re.findall('alvin','yuanaleSxalexwupeiqi')
                      ['alvin']

2 元字符:. ^ $ * + ? { } [ ] | ( ) \

元字符之. ^ $ * + ? { }

 1 import re
 2
 3 ret=re.findall('a..in','helloalvin')
 4 print(ret)#['alvin']
 5
 6
 7 ret=re.findall('^a...n','alvinhelloawwwn')
 8 print(ret)#['alvin']
 9
10
11 ret=re.findall('a...n$','alvinhelloawwwn')
12 print(ret)#['awwwn']
13
14
15 ret=re.findall('a...n$','alvinhelloawwwn')
16 print(ret)#['awwwn']
17
18
19 ret=re.findall('abc*','abcccc')#贪婪匹配[0,+oo]
20 print(ret)#['abcccc']
21
22 ret=re.findall('abc+','abccc')#[1,+oo]
23 print(ret)#['abccc']
24
25 ret=re.findall('abc?','abccc')#[0,1]
26 print(ret)#['abc']
27
28
29 ret=re.findall('abc{1,4}','abccc')
30 print(ret)#['abccc'] 贪婪匹配

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

1 ret=re.findall('abc*?','abcccccc')
2 print(ret)#['ab']

元字符之字符集[]:

 1 #--------------------------------------------字符集[]
 2 ret=re.findall('a[bc]d','acd')
 3 print(ret)#['acd']
 4
 5 ret=re.findall('[a-z]','acd')
 6 print(ret)#['a', 'c', 'd']
 7
 8 ret=re.findall('[.*+]','a.cd+')
 9 print(ret)#['.', '+']
10
11 #在字符集里有功能的符号: - ^ \
12
13 ret=re.findall('[1-9]','45dha3')
14 print(ret)#['4', '5', '3']
15
16 ret=re.findall('[^ab]','45bdha3')
17 print(ret)#['4', '5', 'd', 'h', '3']
18
19 ret=re.findall('[\d]','45bdha3')
20 print(ret)#['4', '5', '3']

元字符之转义符\

反斜杠后边跟元字符去除特殊功能,比如\.
反斜杠后边跟普通字符实现特殊功能,比如\d

\d  匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b  匹配一个特殊字符边界,比如空格 ,&,#等

1 ret=re.findall('I\b','I am LIST')
2 print(ret)#[]
3 ret=re.findall(r'I\b','I am LIST')
4 print(ret)#['I']

现在我们聊一聊\,先看下面两个匹配:

 1 #-----------------------------eg1:
 2 import re
 3 ret=re.findall('c\l','abc\le')
 4 print(ret)#[]
 5 ret=re.findall('c\\l','abc\le')
 6 print(ret)#[]
 7 ret=re.findall('c\\\\l','abc\le')
 8 print(ret)#['c\\l']
 9 ret=re.findall(r'c\\l','abc\le')
10 print(ret)#['c\\l']
11
12 #-----------------------------eg2:
13 #之所以选择\b是因为\b在ASCII表中是有意义的
14 m = re.findall('\bblow', 'blow')
15 print(m)
16 m = re.findall(r'\bblow', 'blow')
17 print(m)

元字符之分组()

1 m = re.findall(r'(ad)+', 'add')
2 print(m)
3
4 ret=re.search('(?P<id>\d{2})/(?P<name>\w{3})','23/com')
5 print(ret.group())#23/com
6 print(ret.group('id'))#23

元字符之|

2 ret=re.search('(ab)|\d','rabhdg8sd')
3 print(ret.group())#ab

re模块下的常用方法

 1 import re
 2 #1
 3 re.findall('a','alvin yuan')    #返回所有满足匹配条件的结果,放在列表里
 4 #2
 5 re.search('a','alvin yuan').group()  #函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
 6                                      # 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
 7
 8 #3
 9 re.match('a','abc').group()     #同search,不过尽在字符串开始处进行匹配
10
11 #4
12 ret=re.split('[ab]','abcd')     #先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
13 print(ret)#['', '', 'cd']
14
15 #5
16 ret=re.sub('\d','abc','alvin5yuan6',1)
17 print(ret)#alvinabcyuan6
18 ret=re.subn('\d','abc','alvin5yuan6')
19 print(ret)#('alvinabcyuanabc', 2)
20
21 #6
22 obj=re.compile('\d{3}')
23 ret=obj.search('abc123eeee')
24 print(ret.group())#123
25 1
26 2
27 3
28 4
29 5
30 6
31 import re
32 ret=re.finditer('\d','ds3sy4784a')
33 print(ret)        #<callable_iterator object at 0x10195f940>
34
35 print(next(ret).group())
36 print(next(ret).group())

注意:"?:"取消优先级

1 import re
2
3 ret=re.findall('www.(baidu|oldboy).com','www.oldboy.com')
4 print(ret)#['oldboy']     这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
5
6 ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')
7 print(ret)#['www.oldboy.com']

补充:

1 import re
2
3 print(re.findall("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>"))
4 print(re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>"))
5 print(re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>"))

1 #匹配出所有的整数
2 import re
3
4 #ret=re.findall(r"\d+{0}]","1-2*(60+(-40.35/5)-(-4*3))")
5 ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")
6 ret.remove("")
7
8 print(ret)

原文链接:https://www.cnblogs.com/yuanchenqi/articles/5732581.html

转载于:https://www.cnblogs.com/jiawen010/p/9908886.html

re模块(* * * * *)正则表达式相关推荐

  1. Python之re模块 —— 正则表达式操作

    Python之re模块 -- 正则表达式操作 转自:http://www.cnblogs.com/PythonHome/archive/2011/11/19/2255459.html 这个模块提供了与 ...

  2. python- re模块(正则表达式)

    讲正题之前我们先来看一个例子:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/ 这是京东的注册页面,打开页面我们就看到这些要求 ...

  3. Python re模块,正则表达式

    re模块 讲正题之前我们先来看一个例子:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/ 这是京东的注册页面,打开页面我们就看 ...

  4. python中的正则表达式re模块_Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

  5. python正则表达式模块_Python常用模块——正则表达式re模块

    Python常用模块--正则表达式re模块 引子 请从以下文件里取出所有的手机号 姓名 地区 身高 体重 电话 况咏蜜 北京 171 48 13651054608 王心颜 上海 169 46 1381 ...

  6. re模块(正则表达式)

    引子 请从以下文件里取出所有的手机号 姓名 地区 身高 体重 电话 况咏蜜 北京 171 48 13651054608 王心颜 上海 169 46 13813234424 马纤羽 深圳 173 50 ...

  7. Python的re模块 --- 正则表达式操作

    这个模块提供了与 Perl 语言类似的正则表达式匹配操作. 模式和被搜索的字符串既可以是 Unicode 字符串 (str) ,也可以是8位字节串 (bytes). 但是,Unicode 字符串与8位 ...

  8. python内置模块re_Python常用内建模块-re模块(正则表达式)

    正则表达式须知正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容就易如反掌了.正则 ...

  9. Python 之Re模块(正则表达式)

    一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配. 二.正则表达式中常用的字符含义 1.普通字符和11个元字符: ...

  10. python中的re模块——正则表达式

    re模块:正则表达式 正则表达式:为匹配字符 import re #导入re模块 #re.findall('正则表达式','被匹配字符') re模块下findall用法 在正则表达式中: \w 表示匹 ...

最新文章

  1. 非常有创意的音乐网站
  2. 首款鸿蒙p系om统终端,华为全力赋能:首款鸿蒙系统终端荣耀智慧屏,距离上市销售倒计时...
  3. hdu 3579(中国剩余定理非互质)
  4. 杭电Color the ball1556
  5. simulink显示多个数据_Stateflow数据介绍(一)
  6. MSF(二):msf外部/内部常用命令
  7. 接口幂等性问题解决方案
  8. jq关于对象类型的判断
  9. 播撒汗水,收获希望!
  10. 在移动端a、input、label等标签点击后会出现背景阴影问题
  11. 第一个关于中式菜谱的智能问答机器人小程序正式上线啦
  12. java gson序列化_java – Gson多态序列化
  13. HPC在石油勘探行业正面临三大考验
  14. android 磁盘日志记录,GitHub - xflyandroid/XLog: 一个简易的日志打印框架(支持打印策略自定义,默认提供2种策略:logcat打印和磁盘打印)...
  15. 设计模式和java实现
  16. 十分钟理解线性代数的本质_线性代数的本质
  17. unity3d画出漂亮的玫瑰图案函数。
  18. 传统单节点网站的 Serverless 上云
  19. 必读论文 | 云机器人必读论文10篇
  20. 【韩松】Deep Gradient Comression_一只神秘的大金毛_新浪博客

热门文章

  1. 每天一道LeetCode-----找到有多少条连续路径的和为给定值,路径不需要从根节点出发到达叶子节点
  2. MFC 获取命令行参数
  3. pixhawk commander.cpp的飞行模式切换解读
  4. 瀑布式开发、迭代式开发、螺旋开发、敏捷开发四种开发模式的区别
  5. 2019牛客暑期多校训练营(第四场)I - String (后缀自动机+回文树)
  6. using(别名)和range based for
  7. C++11强类型枚举,override/final
  8. C++文件操作之get/getline(待学)
  9. 1.4 torch_向量/矩阵求偏导
  10. Java寻找最大公约数