Python基础--正則表達式基本的语法以及re模块
正则是个非常牛逼的东西,python中当然也不会缺少。
所以今天的Python就跟大家一起讨论一下python中的re模块。
re模块包括对正則表達式的支持。
什么是正则:
正則表達式是能够匹配文本片段的模式。
正則表達式’Python’能够匹配’python’
通配符
.表示匹配不论什么字符:
‘.ython’能够匹配’python’和’fython’
对特殊字符进行转义:
‘python\.org’匹配‘python.org’
字符集
‘[pj]ython’能够匹配’python’和’jython’
反转字符集
‘[^abc]’能够匹配除了abc之外的不论什么字符
选择符
使用管道符号|
可选项 (www.)? python.org">http://)?(www.)?python.org
加上问好就变为了可选项:
r’(
'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模块的更多相关文章
- python re 正則表達式
夜深了.敲击键盘.用CSDN整理下python re 正則表達式是含有文本和特别字符的字符串,这些文本和特别字符描写叙述的模式能够识别各种字符串. 一下我们从实例结合理论来学习理解吧... 经常使 ...
- python使用正則表達式
python中使用正則表達式 1. 匹配字符 正則表達式中的元字符有 . ^ $ * + ? { } [ ] \ | ( ) 匹配字符用的模式有 \d 匹配随意数字 \D 匹配随意非 ...
- Java之正則表達式【使用语法】
认为好就顶一个!! ! ! 3.正則表達式 用一些特殊的有意义的字符组成的字符串(死记) 原子:正則表達式的最基本组成单位 正則表達式特殊意义的字符: . * + ?不能单独表示它们,假设非 ...
- python 学习笔记 10 -- 正則表達式
零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...
- Python正則表達式:怎样使用正則表達式
正則表達式(简称RE)本质上能够看作一个小的.高度专业化的编程语言,在Python中能够通过re模块使用它.使用正則表達式,你须要为想要匹配的字符串集合指定一套规则,字符串集合能够包括英文句子.e-m ...
- 正則表達式基础及java使用
正則表達式基础 正則表達式语法(1) 普通字符:字母,数字.汉子,下划线以及没有特殊定义的标点符号都是"普通字符".表达式中的普通字符.在匹配一个字符串的时候,匹配与之同样 ...
- Python正則表達式
Python正則表達式 正則表達式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本号起添加了re 模块,它提供 Perl 风格的正則表達式模式. r ...
- 轻松学习之Linux教程六 正則表達式具体解释
本系列文章由@超人爱因斯坦出品.转载请注明出处. 作者:超人爱因斯坦 个人站点:http://www.hpw123.net 文章链接:http://hpw123.net/a/L ...
- python进阶十_正則表達式(一)
近期状态一直不太好,至于原因,怎么说呢,不好说,总之就是纠结中覆盖着纠结,心思全然不在点上,希望能够借助Python的学习以及博客的撰写来调整回来,有的时候回头想一想,假设真的是我自己的问题呢,曾经我 ...
随机推荐
- ansible 显示运行时间
#独家秘诀cd /etc/ansible mkdir callback_plugins cd callback_plugins wget https://raw.githubusercontent.c ...
- Java_注解之二
在上一次的注解案例里面配置注解的同时,也添加了一对多(@OneToMany)的关系在里面. 本次将补充上次的缺失:其他三种关联方式的配置. 为了简化配置的复杂度 在此案例中Emp和Dept并不是唯 ...
- [ USACO 2018 OPEN ] Out of Sorts (Gold)
\(\\\) \(Description\) 运行以下代码对一长为\(N\)的数列\(A\)排序,不保证数列元素互异: cnt = 0 sorted = false while (not sorted ...
- 2015.12.20-2015.12.25 大论文迭代 A
进一步充实大论文内容.结构,完善一遍大论文 12.20周天,完成论文第五章总结部分,和第一章的修改 12.21周一,完成论文第二章的修改充实 12.22周二,完成论文第三章的修改充实 12.23周三, ...
- day07-列表类型/元组类型/字典类型/集合类型内置方法
目录 列表类型内置方法 元组类型内置方法 字典类型内置方法 集合类型内置方法 列表类型内置方法 用来存多个元素,[]内用逗号隔开任意数据类型的元素 1. list()强制类型转换 print(list ...
- Springboot启动工程后,浏览器出现输入用户名和密码
在使用spring boot的时候发现启动项目时,浏览器需要输入用户名和密码. baidu后发现是因为pom中引用了Spring Security,但是项目中没有使用,在pom中注释掉即可.
- MFC TAB控件顺序
在MFC中添加控件后,按Ctrl+d可以改变控件TAB顺序,怕自己忘了,一个神奇的东西,记下. 关于改变Tab顺序的方法有以下几种: 方法一:在动态创建控件的时候STYLE设置成为WS_CHILD|W ...
- Python 内置函数 day4
import random s = 'abczfg' st= {3,4,9,1,8} print(dir(random))#打印模块内的方法,输出模块/变量可以调用的方法 print(dir(s))# ...
- Labview学习笔记(三)
一.数据 1.数值控件 (1)数值控件 根据不同的模拟状态,放置不同控件 (2)显示格式 为了程序显示,需要设置数值型控件的表示法.数值范围.显示格式等属性. 一般来说,长度越长,则可以表示的数值范围 ...
- [工具]ps
ps 如果想看一个进程的启动时间,可以用lstart来看 [root@jiangyi02.sqa.zmf /home/ahao.mah] #ps -eo pid,lstart,etime,cmd |g ...