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的学习以及博客的撰写来调整回来,有的时候回头想一想,假设真的是我自己的问题呢,曾经我 ...
随机推荐
- 【转】Linux 之 数据流重定向
转自:http://www.linuxidc.com/Linux/2012-09/69764.htm linux在你登入时,便将默认的标准输入.标准输出.标准错误输出安排成你的终端.I/O重定向就是你 ...
- Recyclerview点击事件,更新item的UI+更新Recyclerview外的控件
项目中用到了Recyclerview,在第一行代码中学到了一种相对来说简单的点击事件方法,可是这种点击事件是在adapter中写的,没有教怎么更新item的ui和更新Recyclerview之外的控件 ...
- ScrollView在调试状态一点击就挂的原因(OnMouseActivate)
这几天做的一个任务是做一个Dialog,需要在这个Dialog中添加一个自定义的CSrollvew类,但是遇到一个比较扯淡的问题,程序直接运行时可以的,调试状态下一点击CSrollview就挂了.而且 ...
- html——导航demo
通过行内块.伪类对导航栏进行设置 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- Python 之多线程应用
import socket from threading import Thread def recv_data(): while True: recv_info = udp_socket.recvf ...
- Altium Designer 2017 ActiveRoute使用以及其他技巧
ActiveRoute 点击右下角PCB->PCB ActiveRoute调出ActiveRoute面板 在设计电路时,有一堆细小的白色线,表示几个脚之间需要连接,按住键盘Alt + 鼠标左键, ...
- 解决fixed在苹果手机抖动问题/头部底部固定布局
1.头部和底部固定,中间内容滚动,不涉及fixed 1)absolute与height:100% <!DOCTYPE html><html><head> <m ...
- Fedora 和 RedHat 以及 SUSE 中 YUM 工具的使用
参考博客:https://www.cnblogs.com/good-study/p/9928587.html 一.yum命令概述: 1.简介: yum命令时在Fedora和RedHat以及SUSE中基 ...
- (C/C++学习)4.C++类中的虚函数表Virtual Table
说明:C++的多态是通过一张虚函数表(Virtual Table)来实现的,简称为V-Table.在这个表中,主要为一个类的虚函数的地址表,这张表解决了继承.覆写的问题,保证其真实反应实际的虚函数调用 ...
- 65.dynamic mapping
主要知识点: 理解dynamic mapping 定制dynamic mapping 更改default dynamic mapping 一.理解dynamic mapping 1.基本概念 ...