0 正则表达式

0.1 常见的元字符

.:    匹配除\r\n之外的任何单个字符

*:    匹配前面的子表达式任意次,例如Zz*可以匹配Z,可以匹配Zz,也可以匹配Zzzzzzzzzz

+:    匹配前面的子表达式任意次,例如hh+可以匹配hh,hhh,hhhhhhhhhhhhhhh

{n}:    匹配前面的子表达式n次,例如h{5}匹配hhhhhh

{n,}:    匹配前面的子表达式至少n次,例如h{5, } 匹配hhhhhh,hhhhhhhh,hhhhhhhhhhhhhhhhhh

{n,m}:    匹配前面的子表达式n到m次

?:    匹配前面的子表达式0次或1次,等价于{0,1},如果跟在* + ? {n} {n,} {n,m}后面则代表非贪婪模式。例如hhhhh,用h+匹配得到一个结果hhhhh,用h+?则匹配到5个结果,5个都是h。

\:    转义字符,例如\\n匹配\n,\n匹配换行符,\\匹配\,\(匹配(

^:    匹配字符串的开头,例如^hello匹配hello world

$:    匹配字符串的结尾,例如scut$匹配I am from scut

[...]:    字符集,匹配中括号内的任意字符,-代表范围,^代表非,如果要表示[ ] - ^ 要在前面加上\ 或者把] - 放在首位,把^放到非首位,例如[^0-9]匹配非数字

|:    或,匹配左右表达式任意一个,如果左边匹配成功,就不再匹配右边的表达式,例如convex|function匹配convex或者匹配function

(...):    分组,作为一个整体被匹配,例如,(really ){5} 匹配really really really really really

(?P<name>...):    分组,同时起一个别名

(?P=name):    引用别名为name的分组匹配到的字符串

\<number>:    引用编号为number的分组匹配到的字符串

\d:    匹配数字,等价于[0-9]

\D:    匹配非数字,等价于[^0-9]

\s:    匹配不可见字符,等价于[\f\n\r\t\v],\t是制表符\x09,\n是换行符\x0a,\v是垂直制表符\x0b,\f是换页符\x0c,\r是回车符\x0d

\S:    匹配可见字符,等价于[^\s]

\w:    匹配包括下划线的任何单词字符(unicode字符集),类似但不等价于[A-Za-z0-9_]

\W:    匹配任何非单词字符,等价于[^\w]

1 python中的正则

1.1 反斜杠

在编程语言中使用正则表达式,当我们要匹配\的时候需要用4个\来匹配,\\\\匹配\,因为第一次编程语言会把\\\\转移成\\,然后第二次正则会把\\转移成\。如果用python的原生字符串r来写正则,则可以少写两个\,即r'\\'匹配\,r'\\d'匹配'\d',r‘\d’则匹配数字

1.2  re模块的使用

# 首先将正则表达式编译成Pattern对象
pattern = re.compile('keras') # 可以用Pattern对象的match方法匹配文本,从头开始但不要求完全的匹配,可在最后加入$则是完全匹配,返回Match对象或None
match = pattern.match('keras is a high-level neural networks API') # 也可以用Pattern对象的search方法匹配文本,在文本中寻找子串的匹配,返回Match对象或None
match = pattern.search('keras is a high-level neural networks API') # 用Match对象的方法输出匹配结果
if match:
print match.group() # 另外可以直接使用re的方法进行匹配,这样省了编译那一行,但是不能复用。
re.match('tensorflow', 'tensorflow is an open-source library for Machine Intelligence')
re.search('Machine Intelligence', 'tensorflow is an open-source library for Machine Intelligence')

1.3  re.compile(pattern, flags=0)

返回:Pattern对象

pattern: 字符串形式的正则表达式,可利用上文的元字符和普通字符进行一系列组合得到

flags: 匹配模式,分为如下几个(可用|使用多个,如re.I | re.

re.I或re.IGNORECASE:忽略大小写

re.L或re.LOCALE:使用当地locale。(python中有个locale模块,locale代表不同的语言,地区和字符集)

re.U或re.UNICODE:使用unicode的locale

re.M或re.MULTILINE:使用^或$时会匹配每一行的行首或行尾

re.S或re.DOTALL:使用.时能匹配换行符

re.X或re.VERBOX:忽略空白字符,而且可以加入注释

1.4  Pattern对象

    Pattern对象代表一个正则表达式,包含如下几个方法,这些方法在re都有对应的方法,参数略有不同,下面也一起给出

match(string, pos=0, endpos=-1) | re.match(pattern, string, flags=0):    从头开始匹配,返回一个Match对象或None。

search(string, pos=0, endpos=-1) | re.search(pattern, string, flags=0):    寻找子串的匹配,返回一个Match对象或None

split(string, maxsplit=0) | re.split(pattern, string, maxsplit=0, flags=0):    按照pattern切割string,maxsplit表示最大切割次数

findall(string , pos=0, endpos=-1) | re.findall(pattern, string, flags=0):    搜索返回全部能匹配的子串

finditer(string, pos=0, endpos=-1) | re.finditer(pattern, string, flags=0):    搜索返回match对象的迭代器

sub(repl, string, count=0) | re.sub(pattern, repl, string, count=0, flags=0):    使用repl替换string中能匹配的每一个子串,返回替换后的子串,count指定最多替换次数。

subn(repl, string, count=0) | re.subn(pattern, repl, string, count=0, flags=0):    相比于sub,多返回了一个次数,组成tuple。

1.5  Match对象

    Match对象代表匹配的结果,包含匹配的相关信息。

包含如下属性:string, re( 匹配时使用的Pattern对象), pos, endpos, lastindex(最后一个匹配的分组的下标), lastgroup(最后一个匹配的分组的别名)

包含如下方法:

group(group1, group2, group3,...):

返回一个或多个组匹配的子串,不填写参数默认为group(0),代表整个匹配的子串。

group1可以是编号,也可以是组的别名。

没匹配到的组返回None,匹配到多个子串的组返回最后一个。

groups(default=None):    返所有组匹配的子串。当组没有匹配到子串时候返回default。

groupdict(default=None):    返回字典,键为组的别名,值为该组匹配到的子串。没有别名的组不返回。

start(groupNum=0):    返回指定组匹配的子串在string中的开始下标,没有匹配则返回-1

end(groupNum=0):    返回指定组匹配的子串在string中的结束下标,没有匹配则返回-1

span(group=0):    返回(start(group), end(group))

1.6  unicode编码

python中re模块的正则最好统一使用unicode编码,即u'...'的形式。

因为之前没有使用unicode,在匹配中文的时候出现了匹配错误的结果。

猜测是re模块里的方法默认使用unicode编码来执行的。

正则表达式和python的re模块的更多相关文章

  1. 正则表达式与Python中re模块的使用

    正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...

  2. python全栈开发之正则表达式和python的re模块

    正则表达式和python的re模块 python全栈开发,正则表达式,re模块 一 正则表达式 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的 ...

  3. 正则表达式与python中re模块

    一个网站,正则表达式入门的,很好 http://www.jb51.net/tools/zhengze.html 下面这个包含对python中re的介绍,也是很不错的http://www.w3cscho ...

  4. 常用正则表达式与python中的re模块

    正则表达式是一种通用的字符串匹配技术,不会因为编程语言不一样而发生变化. 部分常用正则表达式规则介绍: . 匹配任意的一个字符串,除了\n * 匹配任意字符串0次或者任意次 \w 匹配字母.数字.下划 ...

  5. Python的regex模块——更强大的正则表达式引擎

    Python自带了正则表达式引擎(内置的re模块),但是不支持一些高级特性,比如下面这几个: 固化分组    Atomic grouping 占有优先量词    Possessive quantifi ...

  6. (转)正则表达式与Python(RE)模块

    Python正则表达式指南  原文:http://blog.csdn.net/qdx411324962/article/details/46799831 Python3(2):正则表达式与Python ...

  7. Python的re模块,正则表达式书写方法

    Python的re模块,正则表达式 #导入re模块 import  re 1.match方法的使用: result = re.match(正则表达式,待匹配的字符串) 正则表达式写法: 第一部分: 字 ...

  8. 【Python开发】Python之re模块 —— 正则表达式操作

    Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...

  9. Python的re模块,正则表达式用法详解,正则表达式中括号的用法

    Python的re模块,正则表达式 #导入re模块 import  re 1.match方法的使用: result = re.match(正则表达式,待匹配的字符串) 正则表达式写法: 第一部分: 字 ...

随机推荐

  1. windows下搭建ffmpeg+nginx+rtmp-module搭建实时视频环境

    下载ffmpeg的Windows静态版: https://ffmpeg.zeranoe.com/builds/win64/static/下载nginx-rtmp-windows版:https://gi ...

  2. CNN图像分割总结

    深度学习(三十三)CRF as RNN语义分割-未完待续 http://blog.csdn.net/hjimce/article/details/50888915 Fully Convolutiona ...

  3. 第二百三十五节,Bootstrap栅格系统

    Bootstrap栅格系统 学习要点: 1.移动设备优先 2.布局容器 3.栅格系统 本节课我们主要学习一下 Bootstrap 的栅格系统,提供了一套响应式.移动设备优先的流 式栅格系统. 一.移动 ...

  4. jquery代码规范让代码越来越好看

    最近学了jQuery,感觉这个jQuery是真的挺不错的,果然像他说的那样,少些多做!刚一入手感觉真是不错.但是写多了,就会发现这个代码一行居然能写那么长.而且可读性还不好.  有幸自己买了一本锋利的 ...

  5. Android系统开发(3)——Makefile的编写

    Makefile是什么? makefile的作用: 1.project文件组织,编译成复杂的程序 2.安装及卸载我们的程序 Makefile使用演示样例 在/home/username/makefil ...

  6. Windows平台安装最新OpenCV-2.4.9,利用Eclipse、MinGW构建C++调用OpenCV开发环境

    近期电脑重装系统了,第一件事重装OpenCV. 这次直接装最新版,2014-4-25日公布的OpenCV2.4.9版本号,下载链接: http://sourceforge.net/projects/o ...

  7. Java面试题全集(上)(中)(下) (转)+自己总结

    Java面试题 自己总总结 https://www.cnblogs.com/songanwei/p/9366427.html Java面试题全集(上) https://blog.csdn.net/ja ...

  8. 【BZOJ3875】[Ahoi2014&Jsoi2014]骑士游戏 SPFA优化DP

    [BZOJ3875][Ahoi2014&Jsoi2014]骑士游戏 Description  [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会扮演一个英勇的 ...

  9. UNION ALL与UNION

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列 ...

  10. 第5章 IDA Pro实验题

    Question: 1.DLLMain的地址是什么? 2.使用import窗口并浏览到gethostbyname,导入函数定位到什么位置 3.有多少函数调用了gethostbyname? 4.将精力放 ...