import re -- 所有正则表达式相关的功能都包含在re模块中

re.sub() -- 字符串替换

>>> import re
>>> s= "100 NORTH BROAD ROAD"
>>> re.sub('ROAD$','RD.',s)
'100 NORTH BROAD RD.' >>> s = "100 BROAD"
>>> re.sub('\\bROUAD$','RD.',s)
'100 BROAD' >>> s='100 BROAD ROAD APT. 3'
>>> re.sub(r'\bROAD$','RD.', s)
'100 BROAD ROAD APT. 3'
>>> re.sub(r'\bROAD\b', 'RD.',s)
'100 BROAD RD. APT. 3'

注:

1) \b 表示在左边必须有一个分隔符。

2) 正则表达式前面的 ‘r'告诉python,字符串中没有任何字符需要转义。eg., '\t'是一个制表符,r'\t'是一个字符‘\‘紧跟一个字符‘t'

re.search() -- 用正则表达式来匹配字符串,如果匹配成功,则返回一个匹配对象,如果没有匹配成功,则返回none

>>> import re
>>> pattern = '^M?M?M?$'
>>> re.search(pattern, 'M')
<_sre.SRE_Match object; span=(0, 1), match='M'>
>>> re.search(pattern,'MM')
<_sre.SRE_Match object; span=(0, 2), match='MM'>
>>> re.search(pattern,'MMM')
<_sre.SRE_Match object; span=(0, 3), match='MMM'>
>>> re.search(pattern,'MMMMM')
>>> re.search(pattern,'')
<_sre.SRE_Match object; span=(0, 0), match=''>
>>> import re
>>> pattern = '^M?M?M?$'
>>> re.search(pattern, 'M')
<_sre.SRE_Match object; span=(0, 1), match='M'>
>>> re.search(pattern,'MM')
<_sre.SRE_Match object; span=(0, 2), match='MM'>
>>> re.search(pattern,'MMM')
<_sre.SRE_Match object; span=(0, 3), match='MMM'>
>>> re.search(pattern,'MMMMM')
>>> re.search(pattern,'')
<_sre.SRE_Match object; span=(0, 0), match=''>

注:

1)?-- 表示匹配可选

2) M{0,3} -- 表示匹配0~3次M

松散正则表达式:

1. 空白符被忽略。空格、制表、回车在正则表达式中并不会被匹配。如果想匹配这些字符,需要加转义字符'\'。

2.注释信息(以#开头直到行尾)被忽略。

3. 用松散正则表达式时,需要传递re.VERBOSE参数。

>>> pattern = '''
^ #beginning of string
M{0,3} #thousands - 0 to 3 Ms
(CM|CD|D?C{0,3}) #hundreds - 900(CM), 400(CD),0-300 (0 to 3 Cs) or 500-800
#(D, followed by 0 to 3 Cs )
(XC|XL|L?X{0,3}) #tens - 90(XC), 40(XL), 0-30 (0 TO 3 Xs), or 50~80
#(L, followed by 0 to 3 Xs)
(IX|IV|V?I{0,3}) #ones - 9 (IX), 4(IV),0-3 (0 to 3 Is),
#or 5~8 (V,followed by 0 to 3 Is)
$ #end of string
'''
>>> re.search(pattern, 'M', re.VERBOSE)
<_sre.SRE_Match object; span=(0, 1), match='M'>
>>> re.search(pattern, 'MCMLXXXIX', re.VERBOSE)
<_sre.SRE_Match object; span=(0, 9), match='MCMLXXXIX'>

案例:匹配电话号码

\d: -- 匹配所有0-9数字

\D: -- 匹配除了数字外所有字符

+:-- 匹配一次或多次

* : -- 匹配0次或多次

>>> phonePattern = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')
>>> phonePattern.search('work 1-(800) 555.1212 #1234').groups()
('800', '555', '1212', '1234')

正则表达式符号及其含义:

$--字符串结尾

^--字符串开头

x?-- 匹配0次或一次x字符

x+:-- 匹配一次或多次x字符

x* : -- 匹配0次或多次x字符

x{m,n} -- 表示匹配m~n次x字符

x{n} -- 表示匹配n次x字符

(a|b|c) -- 表示匹配a或b或c

(x) -- 这是一个组合,被匹配到的字符串会被存储,用re.search()返回对象的groups()方法获得被匹配的值

\d: -- 匹配所有0-9数字

\D: -- 匹配除了数字外所有字符

\b: --匹配一个单词边界

python学习笔记4-正则表达式的更多相关文章

  1. Python学习笔记013_正则表达式

    Python中的正则表达式是通过 re 模块实现的. 通配符 .  表示除了换行以外的任何字符; 编写正则表达式时使用  r're'  , r + 正则表达式内容 >>> impor ...

  2. python学习笔记之——正则表达式

    1.re模块 Python通过re模块提供对正则表达式的支持,re 模块使 Python 语言拥有全部的正则表达式功能.使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用 ...

  3. Python学习笔记 - day10 - 正则表达式

    正则表达式 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样 ...

  4. Python学习笔记(正则表达式)

    \b - 表示以什么开头或结尾 \d - 匹配数字 \w - 匹配字母或数字或下划线或汉字(我试验下了,发现3.x版本可以匹配汉字,但2.x版本不可以) \s - 匹配任意的空白符 ^ - 匹配字符串 ...

  5. Python学习笔记之正则表达式

    本篇在写的时候大量参考了https://deerchao.cn/tutorials/regex/regex.htm的内容 一.什么是正则表达式 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂 ...

  6. 【Python学习笔记】正则表达式

    Ref:https://deerchao.net/tutorials/regex/regex.htm#greedyandlazy 1. 常用元字符 2.字符转义 查找元字符本身时,需要使用\来取消这些 ...

  7. 【目录】Python学习笔记

    目录:Python学习笔记 目标:坚持每天学习,每周一篇博文 1. Python学习笔记 - day1 - 概述及安装 2.Python学习笔记 - day2 - PyCharm的基本使用 3.Pyt ...

  8. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

  9. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  10. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

随机推荐

  1. JS创建对象篇

    JS创建对象篇 Object构造函数创建 var person = new Object(); person.name = "Tom"; person.age = 10; pers ...

  2. tornado template

    若果使用Tornado进行web开发可能会用到模板功能,页面继承,嵌套... 多页应用模板的处理多半依赖后端(SPA就可以动态加载局部视图),就算是RESTfull的API设计,也不妨碍同时提供部分模 ...

  3. 解析大型.NET ERP系统 通用附件管理功能

    大型系统具备一个通用的附件管理功能,对于单据中无法清晰表达的字段,用一个附件图片或附件文档表示是最好的方法了.比如物料清单附加一张CAD图纸,销售订单评审功能中附加客户的各种表格,通用附件功能对系统起 ...

  4. 理清JavaScript正则表达式--下篇

    紧接:"理清JavaScript正则表达式--上篇". 正则在String类中的应用 类String支持四种利用正则表达式的方法.分别是search.replace.match和s ...

  5. CGI与FastCGI

    当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断发展,网站也越来越复杂, ...

  6. HTML5 学习总结(二)——HTML5新增属性与表单元素

    一.HTML5新增属性 1.1.contextmenu contextmenu的作用是指定右键菜单. <!DOCTYPE html> <html> <head> & ...

  7. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  8. SQL连接

    SQL连接可以分为内连接.外连接.交叉连接. 数据库数据:             book表                                          stu表 1.内连接 ...

  9. HTML光标样式

    HTML光标样式 把你的光标放到相应文字上鼠标显示效果   cursor:auto;   自动  cursor:zoom-in;   放大镜  cursor:zoom-out;   缩小镜  curs ...

  10. 【转载】C#怎么判断字符是不是汉字

    支持并尊重原创!原文地址:http://jingyan.baidu.com/article/2c8c281deb79ed0008252af1.html 判断一个字符是不是汉字通常有三种方法,第1种用 ...