首先要先继承re模块: import re

re.findall() 方法 # 返回值为列表

\w 表示一个字符,为数字,字母,下滑线之一,  \W匹配任意非数字,字母,下划线

print(re.findall('\w3\w','abc3dafg375983_'))    #   输出结果为: ['c3d', 'g37', '83_']

print(re.findall('2\W','abc2_ 2 3| 2|'))   #    输出结果为: ['2 ', '2|']

\s 表示匹配 任意空白字符(\t  \n  \r  \f 分别表示:水平制表符,移动到下一个tab的位置; 换行符; 回车; 换页)  \S匹配任意 非空字符

print(re.findall('2\s','abc2\f_ 2 3| 2\t'))   #  输出结果为 ['2\x0c', '2 ', '2\t'];

若将代码改为: print(re.findall('2\s','abc2\\f_ 2 3| 2\\t')) ,则 输出结果为: ['2 ']

\d 匹配任意数字(0-9),  \D匹配任意非数字

print(re.findall('\d','abc3dafg375983_'))  #输出结果为: ['3', '3', '7', '5', '9', '8', '3']

print(re.findall('\D','abc3dafg375983_'))  #输出结果为: ['a', 'b', 'c', 'd', 'a', 'f', 'g', '_']

\Ax 匹配字符串开始(x表示需要找的字符串),如字符串是以要找的字符串开头,则返回这个字符串,若不是则结束匹配

print(re.findall('\Aa','abc3dafg375983_'))  #输出结果为: ['a']

x\Z 匹配字符串结束(x表示需要找的字符串)

print(re.findall('3\Z','abc3dafg375983_'))  #输出结果为: [ ] 表示空列表,表示字符串不是以3结尾

^  字符串开头匹配(判段开头是否为要找的字符串,并返回值,若不是,则结束寻找)

$  从末尾开始匹配(判段结尾是否为要找的字符串,并返回值,若不是,则结束寻找)

print(re.findall('^c3','c3abc3dafg37c3983_'))     输出结果为: ['c3']

print(re.findall('c3$','c3abc3dafg37c398c3_'))  输出结果为: [ ]

. :匹配除换行符之外的任意字符, 加上flag:re.DOTALL 即可匹配换行符

print(re.findall('a.c','abc a c a|ca#ckfaabbc'))  输出结果为:['abc', 'a c', 'a|c', 'a#c']

[...] :表示匹配一组字符中的一个字符

print(re.findall('[b.]','abc a c a|ca#ckfa.abbc'))  输出结果为: ['b', '.', 'b', 'b']

print(re.findall('a[a-zA-Z]c','aBcfagchka|c',re.DOTALL))  输出结果为: ['aBc', 'agc']

重复匹配:

? :表示在?左边的字符出现0次或1次

print(re.findall('ab?','a ab abb abc acf b ab a21b'))  #  在此情况下表示 , b出现一次或0次的字符串,结果为: ['a', 'ab', 'ab', 'ab', 'a', 'ab', 'a']

* :0次到无穷多次

print(re.findall('ab*','aababbaaabbb'))  #输出结果为: ['a', 'ab', 'abb', 'a', 'a', 'abbb']

+ :1次或无穷多次

print(re.findall('ab+','a ab abb bb abbb aaabbb'))  # 输出结果为: ['ab', 'abb', 'abbb', 'abbb']

.* :贪婪匹配,尽可能多的吞噬字符

print(re.findall('a.*c','aasfakfipgld csagsdpp cas'))   # 输出结果为: ['aasfakfipgld csagsdpp c']

.*? : 非贪婪匹配,尽可能少的吞噬字符

print(re.findall('a.*?c','aasfakfipgld csagsdpp cas'))   # 输出结果为: ['aasfakfipgldc', 'agsdpp c']

| :表示或者

print(re.findall('yang|huang','yang is a boy huang is a girl'))  #输出结果为: ['yang', 'huang']

() : 表示分组,默认情况下只保留括号内的数据, 在括号内加入?:则会保留完整的

print(re.findall('email.:\w{3,}@\w+\.(?:cn|com|edu|org)','email1:378533872@qq.com email2:333312312@163.com eamil3:alexsb123@gmail.com'))

输出结果为: ['378533872@qq.cn', '333312312@163.com', 'alexsb123@gmail.com']

re.I   #  忽略大小写

print(re.findall('alex','aLex is Alex is alExandaleX',re.I))  # 输出结果为:['aLex', 'Alex', 'alEx', 'aleX']

re.M  #忽略换行符

msg="""

ahfquqfqioiyang

sfahsifpofayang

fdi352526yang

# """

print(re.findall('yang$',msg,re.M))    #  输出结果为: ['yang','yang','yang']

re.search()方法   找到一个即停止

print(re.search('alex','alex is alex is alex'))  #  输出结果为: <_sre.SRE_Match object; span=(0, 4), match='alex'>

re.match()方法  找开头,没有找到则结束

print(re.match('alex','alex is alex is alex'))  #  输出结果为: <_sre.SRE_Match object; span=(0, 4), match='alex'>

从上述代码可以看出search方法与match方法返回结果比较相似

小练习:找到以下字符串中所有的数字(正数,负数,小数):

msg="1-2*(60+(-40.35/5)-(-4*3))"

代码为:
print(re.findall('\D?(-?\d+\.?\d*)',msg))
结果为:
['1', '2', '60', '-40.35', '5', '-4', '3']
												

最新文章

  1. SendInput模拟键盘输入的问题
  2. 在VS2012中采用C++中调用DLL中的函数 (4)
  3. 【WCF--初入江湖】05 WCF异步编程
  4. hdu 1159 Common Subsequence(LCS最长公共子序列)
  5. Appium 命令行启动配置
  6. [Scikit-learn] 2.1 Clustering - Variational Bayesian Gaussian Mixture
  7. WinSock 异步I/O模型-1
  8. 查询APP Store已发布过的版本记录
  9. WinServer配置MySQL主从同步
  10. JDK1.8下载与安装及环境变量配置
  11. 编写python程序和运行.py文件的方法步骤
  12. docker限制容器内存使用上限
  13. [matlab] 10.最小覆盖
  14. php回话控制 cookie
  15. angular学习笔记(2)- 前端开发环境
  16. URL中传递参数给视图函数
  17. js 匿名函数 用法
  18. Myeclipse/STS 首次在本地部署配置一个Spring MVC 项目 (十二)
  19. 解决 win7 注册com组件失败问题
  20. Spring MVC 学习笔记1 - First Helloworld by Eclipse【&amp; - java web 开发Tips集锦】

热门文章

  1. C# 数据推送 实时数据推送 轻量级消息订阅发布 多级消息推送 分布式推送
  2. day05 字典
  3. CodeForces - 455D
  4. 关于函数式编程(Functional Programming)
  5. 一、Ansible安装
  6. SVN远程管理
  7. Java_EE面试题
  8. centos 7中监控mysql 数据库脚本(监控端口)
  9. windows配置远程桌面连接到ubuntu
  10. 对pytorch中Tensor的剖析