正则表达式
部分素材及文档整理在B站和51cto还有老师的技术支持下,我整出了这篇文档
-------by:Bill Chang
此篇为作者原创 转载需请求权限!
1.介绍:
正则表达式为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础。简单地说,正则表达式(简称为regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,于是正则表达式能按照某种模式匹配一系列有相似特征的字符串
PS:正规表达式模块re(modules)
备注:
术语“匹配”(matching ),指的是术语“模式匹配”(pattern-matching)。在Python 术语中,主要有两种方法完成模式匹配:“搜索”(searching ),即在字符串任意部分中搜索匹配的模式;而“匹配”(matching)是指判断一个字符串能否从起始处全部或者部分地匹配某个模式。搜索通过search()函数或方法来实现,而匹配通过调用 match()函数或方法实现。总之,当涉及模式时,全部使用术语“匹配”;我们按照C 如何完成模式匹配的方式来区分“搜索”和“匹配”。
2.特殊符号和字符:
正规表达式最常见的特殊符号和字符,也就是所谓的“元字符”,使用这些字符可以使正规表达式更加灵活和强大
2.1常见的表达式符号和字符
表示法
描述
正规表达式实例
符号
literal
匹配文本字符串的字面值literal
foo
Re1|re2
匹配正则表达式re1或者re2
Foo|bar
.
匹配任何字符(除了\n之外(换行符))
Ice.ice
^
匹配字符串起始部分
^Fjjjzx
$
匹配字符串终止部分
/bin/*sh$
*
匹配0次或者多次前面出现的正则表达式
[A-Za-z0-9]*
+
匹配1次或者多次前面出现的正则表达式
[a-z]+\fjjjzx.com
?
匹配0次或者1次前面出现的正则表达式
Goo?
{N}
匹配N次前面出现的正则表达式
[0-9]{3}
{M,N}
匹配M~N次前面出现的正则表达式
[0-9]{5,7}
[…]
匹配来自字符集的任意单一字符
[zhanqgixiang]
[..x-y..]
匹配x~y范围中的任意单一字符
[0-9],[A-Za-z]
[^…]
不知道如何用语言表达
[^x],[^A-Za-z0-9]
(*|+|?|{})?
匹配上面频繁出现or重复的符号
.*?[a-z]
(…)
匹配封闭的正则表达式,然后存为子组
([0-9]{3})?,f(oo|u)
2.2常见的表达式符号和字符(特殊字符)
表示法
描述
正规表达式实例
特殊字符
\d
匹配任何十进制数字
Data\d+.txt
\w
匹配任意字母数字字符
[A-Za-z_]\w+
\s
匹配任意空字符,与[\n\t\r\v\f]相同(与\S相反)
Of\sthe
\b
匹配任意单词边界
\bWOC\b
\N
匹配以保存的子组,上面写了自己看
Price:\16
\c
这个…
\.,\\,\*
2.3常见的表达式符号和字符(扩展表示法)
表示法
描述
正规表达式实例
扩展表示法
(?iLmsux)
在正则表达式中嵌入多个特殊标记参数
(?x),没找到相关资料
(?:…)
表示一个匹配不用保存的分组
(?:\w+\.)*
(?P)
哇,不知道怎么表达
自己看下老师
网站里面写的www.liaoxuefeng.com
3.使用择一匹配符号匹配多个正则表达式模式
表示择一匹配的管道符号(|),也就是键盘上的竖线,表示一个 “从多个模式中选择其一”的操作。它用于分割不同的正则表达式。例如,在下面的表格中,左边是一些运用择一匹配的模式,右边是左边相应的模式所能够匹配的字符。
正则表达式模式
匹配的字符串
At|home
At,home
R2d2|c3po
R2d2,c3po
Bat|bet|ice
Bat\bet\ice
有了这个符号,就能够增强正则表达式的灵活性,使得正则表达式能够匹配多个字符串而不仅仅只是一个字符串。择一匹配有时候也称作并(union)或者逻辑或(logical OR )。
4.匹配任意单个字符
点号或者句点(.)符号匹配除了换行符\n 以外的任何字符(Python 正则表达式有一个编译标记[S 或者 DOTALL],该标记能够推翻这个限制,使点号能够匹配换行符)。无论字母、数字、空格(并不包括“\n”换行符)、可打印字符、不可打印字符,还是一个符号,使用点号都能够匹配它们。
正则表达式模式
匹配的字符串
f.o
匹配f到o任意字符,例如fao,f9o,f#o
..
任意两个字符
.end
匹配在字符串end之前的任意一个字符
5.核心函数和使用方法(re模块)
正则表达式对象(regex object)和正则匹配对象(regex match object)的
5.1使用compile()函数编译正则表达式
5.2匹配对象group()和groups()方法
当处理正则表达式时,除了正则表达式对象之外,还有另一个对象类型:匹配对象。这些是成功调用match()或者search()返回的对象。匹配对象有两个主要的方法:group() 和groups()。group() 要么返回整个匹配对象,要么根据要求返回特定子组。groups()则仅返回一个包含唯一或者全部子组的元组。如果没有子组的要求,那么当 group() 仍然返回整个匹配时,groups()返回一个空元组。Python 正则表达式也允许命名匹配。
5.3使用match()方法匹配字符串
利用re模块来进行match()匹配正则表达式对象(regex object)方法,match()韩树试图从字符串的起始部分对模式进行匹配,如果匹配成功,就返回一个匹配对象,如果
匹配失败,就返回 None,匹配对象的 group() 方法能够用于显示那个成功的匹配
上面是匹配成功的↑
上面是匹配失败的,返回一个None
及时字符串比较长,也能正常匹配成功
5.4使用search()在一个字符串中查找
search()的工作方式与 match()完全一致,不同之处在于 search()会用它的字符串参数,在任意位置对给定正则表达式模式搜索第一次出现的匹配情况。如果搜索到成功的匹配,就会返回一个匹配对象;否则,返回 None。
……
……
……
……
……
……
6.正则表达式实战(在CTF比赛中灵活运用,得奖几率大)
|
|