Python常用模块——正则表达式re模块

引子

请从以下文件里取出所有的手机号

姓名 地区 身高 体重 电话

况咏蜜 北京 171 48 13651054608

王心颜 上海 169 46 13813234424

马纤羽 深圳 173 50 13744234523

乔亦菲 广州 172 52 15823423525

罗梦竹 北京 175 49 18623423421

刘诺涵 北京 170 48 18623423765

岳妮妮 深圳 177 54 18835324553

贺婉萱 深圳 174 52 18933434452

叶梓萱 上海 171 49 18042432324

杜姗姗 北京 167 49 13324523342

你能想到的办法是什么?

必然是下面这种吧?

f = open("兼职白领学生空姐模特护士联系方式.txt",'r',encoding="gbk")

phones = []

for line in f:

name,city,height,weight,phone = line.split()

if phone.startswith('1') and len(phone) == 11:

phones.append(phone)

print(phones)

有没有更简单的方式?

手机号是有规则的,都是数字且是11位,再严格点,就都是1开头,如果能把这样的规则写成代码,直接拿规则代码匹配文件内容不就行了?

import re

f = open("兼职模特空姐联系方式.txt")

data = f.read()

print(re.findall("[0-9]{11}", data))

这么nb的玩法是什么?它的名字叫正则表达式!

re模块

正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是re。

1、常用的表达式规则

'.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行

'^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)

'$' 匹配字符结尾, 若指定flags MULTILINE,re.search('foo.$','foo1\nfoo2\n',re.MULTILINE).group() 会匹配到foo1

'*' 匹配*号前的字符0次或多次, re.search('a*','aaaabac') 结果'aaaa'

'+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']

'?' 匹配前一个字符1次或0次 ,re.search('b?','alex').group() 匹配b 0次

'{m}' 匹配前一个字符m次 ,re.search('b{3}','alexbbbs').group() 匹配到'bbb'

'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']

'|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'

'(...)' 分组匹配, re.search("(abc){2}a(123|45)", "abcabca456c").group() 结果为'abcabca45'

'\A' 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的,相当于re.match('abc',"alexabc") 或^

'\Z' 匹配字符结尾,同$

'\d' 匹配数字0-9

'\D' 匹配非数字

'\w' 匹配[A-Za-z0-9]

'\W' 匹配非[A-Za-z0-9]

's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'

'(?P...)' 分组匹配 re.search("(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{4})")

2、re的匹配语法

re.match 从头开始匹配

re.search 匹配包含

re.findall 把所有匹配到的字符放到一起,以列表中的元素返回

re.split 以匹配到的字符当做列表分隔符

re.sub 匹配字符并替换

re.fullmatch 全部匹配

re.match(pattern, string, flags=0)

从起始位置开始根据模型去字符串中匹配指定内容,匹配单个

pattern 正则表达式

string 要匹配的字符串

flags 标志位,用于控制正则表达式的匹配方式

import re

obj = re.match('\d+', '123uuasf') #如果能匹配到就返回一个可调用的对象,否则返回None

if obj:

print obj.group()

Flags标志符

re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)

re.M(MULTILINE): 多行模式,改变’^’和’$’的行为

re.S(DOTALL): 改变’.’的行为,make the ‘.’ special character match any character at all, including a newline; without this flag, ‘.’ will match anything except a newline.

re.X(re.VERBOSE) 可以给你的表达式写注释,使其更可读,下面这2个意思一样

a = re.compile(r"""\d + # the integral part

\. # the decimal point

\d * # some fractional digits""",

re.X)

b = re.compile(r"\d+\.\d*")

re.search(pattern, string, flags=0)

根据模型去字符串中匹配指定内容,匹配单个

import re

obj = re.search('\d+', 'u123uu888asf')

if obj:

print obj.group()

re.findall(pattern, string, flags=0)

match and search均用于匹配单值,即:只能匹配字符串中的一个,如果想要匹配到字符串中所有符合条件的元素,则需要使用 findall。

import re

obj = re.findall('\d+', 'fa123uu888asf')

print obj

re.sub(pattern, repl, string, count=0, flags=0)

用于替换匹配的字符串,比str.replace功能更加强大

>>>re.sub('[a-z]+','sb','武配齐是abc123',)

>>> re.sub('\d+','|', 'alex22wupeiqi33oldboy55',count=2)

'alex|wupeiqi|oldboy55'

re.split(pattern, string, maxsplit=0, flags=0)

用匹配到的值做为分割点,把值分割成列表

>>>s='9-2*5/3+7/3*99/4*2998+10*568/14'

>>>re.split('[\*\-\/\+]',s)

['9', '2', '5', '3', '7', '3', '99', '4', '2998', '10', '568', '14']

>>> re.split('[\*\-\/\+]',s,3)

['9', '2', '5', '3+7/3*99/4*2998+10*568/14']

re.fullmatch(pattern, string, flags=0)

整个字符串匹配成功就返回re object, 否则返回None

re.fullmatch('\[email protected]\w+\.(com|cn|edu)',"[email protected]")

python正则表达式模块_Python常用模块——正则表达式re模块相关推荐

  1. python的urllib四大模块_Python常用的内建模块4:urllib

    urllib提供了一系列用于操作URL的功能 Get urllib的request模块可以非常方便的抓取URL的内容, 也就是发送一个GET请求到制定的页面, 然后返回HTTP的响应: 例如, 对豆瓣 ...

  2. python中的正则表达式re模块_python中的正则表达式(re模块)

    一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...

  3. python中re模块_Python中re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  4. python必学的模块_Python常用的模块

    模块和包 1.1模块介绍模块定义:一系列功能的集合体 模块使用: import导入模块 或者 from ... import... 导入模块 模块分类:内置模块 自定义模块 第三方模块 模块加载顺序: ...

  5. python pp模块_python常用模块

    1.re模块 re模块用于对python的正则表达式的操作 1.1 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物 ...

  6. python shelve模块_python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  7. python dcf估值_Python 常用模块

    本节内容 模块介绍 os 模块 sys 模块 time & datetime模块 random 模块 json & picle shutil 模块 shelve 模块 xml 模块 c ...

  8. python常用运维模块_python常用模块之一

    sys模块: sys模块是提供关于python本身的详细内在的信息的模块. sys.executable变量,它包含python解释器的路径 sys.platform变量,告诉我们现在处于什么操作系统 ...

  9. python loggeru模块_python常用模块——logger模块

    python的logging模块提供了通用的日志系统,熟练使用logging模块可以方便开发者开发第三方模块或者是自己的python应用. python使用logging模块记录日志涉及四个主要的类: ...

  10. python爬虫需要调用什么模块_python爬虫需要调用什么模块

    python 爬虫常用模块: Python标准库--urllib模块 功能:打开URL和http协议之类 注:python 3.x中urllib库和urilib2库合并成了urllib库. 其中url ...

最新文章

  1. 足球动图gif(一)
  2. JS的window-location
  3. NDK avi播放器
  4. [j2me]手机也可以玩播客(Podcast)! Geek开发说明[开源]
  5. 使用easyUI给datagrid添加pagination
  6. 【温故而知新】HTTP 报文
  7. (208)ASIC开发总结
  8. 【零基础学Java】—LinkedList集合(四十)
  9. java jvm 查看内存_JVM内存状况查看方法和分析工具(下)
  10. 学创客机器人编程材料费贵吗_创客机器人课程容易学习吗
  11. 电脑自动操作软件_六大写作软件功能解说,网络作家不可错过的码字软件宝典...
  12. Krpano vtourskin.xml 默认皮肤详解
  13. 平台级解决方案,平安给深圳的智慧工具箱
  14. ThinkPad E450 Fn键设置为传统方式
  15. [OHIF-Viewers]医疗数字阅片-医学影像-Module: Panel-自定义面板-中-es6-Object.defineProperty()定义属性...
  16. pythonapi_Python API
  17. java课程设计 计算器_java课程设计-保存计算过程的计算器
  18. 欧姆龙CP1H如何进行PLC远程编程及数据采集
  19. 【北亚数据恢复】DELL EqualLogic存储硬盘坏道数据恢复
  20. 【翻页电子书制作软件】名编辑电子杂志大师教程 | 添加flash动画

热门文章

  1. 黑暗背景(所有暗主题cobalt,dracula...)Rstudio查看对象窗口viewer没有滚动条,白亮背景就有(所有白主题chrome,cloud)。R版本[64-bit] R-3.6.0
  2. 老电脑安装XP时遇到问题的总结
  3. ssm学生请假管理小程序
  4. 中国蚁剑安装使用教程
  5. 用户登录注册流程图-所有项目论文通用计算机毕业设计
  6. 打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹
  7. java web全栈工程师(从零开始)
  8. 文本分析4-词频统计与词云展示
  9. 软件的生命周期和测试的生命周期的区分
  10. 如何进行文档翻译?文档翻译的软件有哪些?