正则是个非常牛逼的东西,python中当然也不会缺少。

所以今天的Python就跟大家一起讨论一下python中的re模块。

re模块包括对正則表達式的支持。

什么是正则:

正則表達式是能够匹配文本片段的模式。

正則表達式’Python’能够匹配’python’

通配符

.表示匹配不论什么字符:

‘.ython’能够匹配’python’和’fython’

对特殊字符进行转义

‘python\.org’匹配‘python.org’

字符集

‘[pj]ython’能够匹配’python’和’jython’

反转字符集

‘[^abc]’能够匹配除了abc之外的不论什么字符

选择符

使用管道符号|

可选项

加上问好就变为了可选项:

r’(

(www.)?

python.org">http://)?(www.)?python.org‘仅仅能匹配以下几种:

'http://www.python.org'
'http://python.org'
'www.python.org'
'python.org'

反复子模式

*:同意模式反复0次或多次

+:同意模式反复1次或多次

{m, n}同意模式反复m-n次

当然,正则语法规则非常多,远不止上面的这些。可是我们仅仅能点到为止了,由于这篇博客的目的是介绍Python中的模块,re模块。

re 模块使 Python 语言拥有全部的正則表達式功能。

compile 函数依据一个模式字符串和可选的标志參数生成一个正則表達式对象。

该对象拥有一系列方法用于正則表達式匹配和替换。

re 模块也提供了与这些方法功能全然一致的函数,这些函数使用一个模式字符串做为它们的第一个參数。

re中重要的函数:

compile(pattern[, flags]) 依据包括正則表達式的字符串创建模式对象
search(pattern, string[, flags]) 在字符串中寻找模式
match(pattern, string[, flags]) 在字符串的開始处匹配模式
split(pattern, string[, maxsplit=0]) 依据匹配项切割字符串
findall(pattern, string) 列出字符串中模式的全部匹配项
sub(pat, rep, string[, count=0]) 字符串中全部pat的匹配项用repl替换
escape(string) 将字符串中全部特殊表达式字符转义

以下就进行简单的应用:

使用match

import re
print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配

使用search

import re
print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配

这时候须要停一下,match和search的差别呢?

看看结果先:

match样例中结果:
(0, 3)
None search样例中结果:
(0, 3)
(11, 14)

match()函数仅仅检測RE是不是在string的開始位置匹配,search()会扫描整个string查找匹配;

也就是说match()仅仅有在0位置匹配成功的话才有返回。假设不是開始位置匹配成功的话,match()就返回none。

search()会扫描整个字符串并返回第一个成功的匹配。

使用sub

Python 的re模块提供了re.sub用于替换字符串中的匹配项。

#!/usr/bin/python
import re phone = "2004-959-559 # This is Phone Number" # Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num # Remove anything other than digits
num = re.sub(r'\D', "", phone)
print "Phone Num : ", num

结果:

Phone Num :  2004-959-559
Phone Num : 2004959559

最后献上菊花:

^   匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配随意字符。除了换行符。当re.DOTALL标记被指定时,则能够匹配包括换行符的随意字符。
[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或多个的表达式。 re+ 匹配1个或多个的表达式。
re? 匹配0个或1个由前面的正則表達式定义的片段,非贪婪方式
re{ n}
re{ n,} 精确匹配n个前面表达式。 re{ n, m} 匹配 n 到 m 次由前面的正則表達式定义的片段,贪婪方式
a| b 匹配a或b
(re) G匹配括号内的表达式。也表示一个组
(?imx) 正則表達式包括三种可选标志:i, m, 或 x 。仅仅影响括号里的区域。 (?-imx) 正則表達式关闭 i, m, 或 x 可选标志。 仅仅影响括号里的区域。
(? : re) 相似 (...), 可是不表示一个组
(?imx: re) 在括号里使用i, m, 或 x 可选标志
(?-imx: re) 在括号里不使用i, m, 或 x 可选标志
(?#...) 凝视.
(?= re) 前向肯定界定符。假设所含正則表達式,以 ... 表示,在当前位置成功匹配时成功,否则失败。 但一旦所含表达式已经尝试。匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re) 匹配的独立模式。省去回溯。 \w 匹配字母数字
\W 匹配非字母数字
\s 匹配随意空白字符,等价于 [\t\n\r\f].
\S 匹配随意非空字符
\d 匹配随意数字,等价于 [0-9].
\D 匹配随意非数字
\A 匹配字符串開始
\Z 匹配字符串结束。假设是存在换行,仅仅匹配到换行前的结束字符串。c
\z 匹配字符串结束
\G 匹配最后匹配完毕的位置。
\b 匹配一个单词边界,也就是指单词和空格间的位置。 比如, 'er\b' 能够匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等. 匹配一个换行符。匹配一个制表符。等
\1...\9 匹配第n个分组的子表达式。 \10 匹配第n个分组的子表达式,假设它经匹配。否则指的是八进制字符码的表达式。

Python基础--正則表達式基本的语法以及re模块的更多相关文章

  1. python re 正則表達式

    夜深了.敲击键盘.用CSDN整理下python   re 正則表達式是含有文本和特别字符的字符串,这些文本和特别字符描写叙述的模式能够识别各种字符串. 一下我们从实例结合理论来学习理解吧... 经常使 ...

  2. python使用正則表達式

    python中使用正則表達式 1. 匹配字符 正則表達式中的元字符有 .  ^  $ *   +  ?  { }  [ ]  \  | ( ) 匹配字符用的模式有 \d 匹配随意数字 \D 匹配随意非 ...

  3. Java之正則表達式【使用语法】

    认为好就顶一个!! ! ! 3.正則表達式 用一些特殊的有意义的字符组成的字符串(死记) 原子:正則表達式的最基本组成单位 正則表達式特殊意义的字符:   .  *  +  ?不能单独表示它们,假设非 ...

  4. python 学习笔记 10 -- 正則表達式

    零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...

  5. Python正則表達式:怎样使用正則表達式

    正則表達式(简称RE)本质上能够看作一个小的.高度专业化的编程语言,在Python中能够通过re模块使用它.使用正則表達式,你须要为想要匹配的字符串集合指定一套规则,字符串集合能够包括英文句子.e-m ...

  6. 正則表達式基础及java使用

    正則表達式基础 正則表達式语法(1)     普通字符:字母,数字.汉子,下划线以及没有特殊定义的标点符号都是"普通字符".表达式中的普通字符.在匹配一个字符串的时候,匹配与之同样 ...

  7. Python正則表達式

    Python正則表達式 正則表達式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本号起添加了re 模块,它提供 Perl 风格的正則表達式模式. r ...

  8. 轻松学习之Linux教程六 正則表達式具体解释

    本系列文章由@超人爱因斯坦出品.转载请注明出处. 作者:超人爱因斯坦    个人站点:http://www.hpw123.net          文章链接:http://hpw123.net/a/L ...

  9. python进阶十_正則表達式(一)

    近期状态一直不太好,至于原因,怎么说呢,不好说,总之就是纠结中覆盖着纠结,心思全然不在点上,希望能够借助Python的学习以及博客的撰写来调整回来,有的时候回头想一想,假设真的是我自己的问题呢,曾经我 ...

随机推荐

  1. Hadoop基础(二)

    HDFS 读写流程 我们知道在HDFS中我们的文件按数据块进行存储,那么当我们写入或者读取一个文件的时候HDFS到底进行了哪些操作呢? HDFS 写流程 如上图所示,假如我们有一个四个节点的集群,并且 ...

  2. AdminLTE介绍和zTree的简单使用

    一.AdminLTE介绍 1.介绍 ​ AdminLTE是一个开源的后台控制面板和仪表盘 WebApp 模板,是建立在Bootstrap3框架和JQuery之上的开源模板主题工具,它提供了一系列响应的 ...

  3. xampp中localhost与DreamWaver站点设置问题

    作为一个初学者,在DreamWaver中配置web服务器用于本地测试,中间碰到了好多问题,百度答案模糊不清,自己摸索出来,把自己碰到的,易错的地方做个总结. step1 : 安装xampp(安装位置记 ...

  4. ArcGIS Android工程迁移到其他电脑不能打开的问题

    问题描述:当我把已经做好的ArcGIS Android工程想在其他电脑运行时,总是会提示报错.而报错的地方,正是出现在下面这条语句上. compile 'com.esri.arcgisruntime: ...

  5. Ajax——异步基础知识(一)

    基础概念 1.异步请求可以做到偷偷向服务器发送请求,而页面却不刷新 2.get异步请求传递参数是通过url追加键值对的方式 3.post异步请求比较特殊,需要设置请求的类型 User-Agent:浏览 ...

  6. docloud后台管理项目(前端篇)

    以下内容与主题无关,如果不想看可以直接忽视 !--忽视开始--! 给大家推荐一款强大的编辑器,那就是集响应快.体验好.逼格高.功能丰富为一体的sublime text 3.它除了以上特点,还有一个最重 ...

  7. Forum/viewthread.php代码备份

    <!--{eval $lzthread = DB::fetch_all("SELECT `tid`,`subject` FROM ".DB::table('forum_thr ...

  8. Linux内核源码特殊用法

    崇拜并且转载的: http://ilinuxkernel.com/files/5/Linux_Kernel_Source_Code.htm Linux内核源码特殊用法 1 前言 Linux内核源码主要 ...

  9. How To:配置Linux iSCSI客户端

    1.安装客户端 [root@node01 Packages]# rpm -Uvh iscsi-initiator-utils-6.2.0.873-2.el6.x86_64.rpm warning: i ...

  10. python中zip( )的使用

    zip函数简单用法 x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] xyz = zip(x,y,z) #得到一个zip对象 xyz #打印结果为<zip ob ...