Python编程—正则表达式基础知识

  • 正则表达式:简称regex,故在Python中通过re模块来支持正则表达式,它可以用来进行模式匹配、提取、查找和替换。通俗来讲,就是用特殊字符的组合来搜索匹配目标文本的一种表达式,在Python中我们可以用来提取目标文件,如爬虫时提取自己想要的文字信息。

1、常用正则表达式符号

了解正则表达式的定义之后,接下来就是利用正则表达的这些特殊符合和字符(又称元字符)来提取我们想要的信息了,下面以表格的形式列出常用的特殊字符的表示意义,并通过示例直观的了解其含义;

常见的正则表达式符号和字符
字符表示 描述 正则表达式模式串      匹配的字符串 备注
literal 直接匹配字面字符串literal qwer                qwer 字面意思直接匹配
re1|re2 匹配正则表达式re1或者re2 apple|orange   at、orange 择一匹配,|就是常见的“或”d的意思
. 匹配任何单个字符(除/n外) gr.st grast、grbst、gr*st、 .可以匹配除"/n"之外的任何字符。
^ 匹配字符串起始部分 ^to top、tolert 匹配任何以to开头的字符串

$

匹配字符串终止部分 com$ baidu.com 、Sogou.com 匹配任何以com结尾的字符串
* 匹配0次或多次其前字符      
+ 匹配1次或多次其前字符      
匹配0次或1次其前字符      
{N} 匹配N次其前的字符      
{M,N} 匹配M~N次其前的表达式      
[ ] 匹配[ ]里面的任何单个字符 y[opd]o yoo、ypo、ydo 用于匹配[ ]特定的字符(或 的关系)

注:若想显示匹配句点(.)和其它一些本意的字符($)怎么办呢?   使用反斜线转义字符,例如匹配.  则使用\.可以显示匹配.

原始字符:r    例如\b这类已经有个\了,\b表示ASCII字符的退格符,同时也是正则表达式的单词边界,当然我们可以使用\,但是有人觉得\\bText,实在是不好看,就规定说用r来表示吧,表示为r'\bText'。

还有一些简单的特殊字符的表示例如\d,\w,\s,\b,\c等这些特殊字符表示方法。也有一些扩展的表示方法,这些都是用方括号()括着的,进行指定分组的匹配,这里不在一一列举,在任何Python教材基本都能查询这些表示方法,记住一些常见的特殊组合就行。

 

2、限定范围和否定表达式

首先了解一下搜索和匹配的不同

搜索:在字符串中的任意部分中进行搜索匹配

匹配:判断一个字符能否从起始处全部或者部分的匹配某个模式。

连字符(-):指定的字符范围,如A-Z、a-z或者0-9分别表示大写字母、小写字母和数值数字。

脱字符(^):如果它紧跟在左方括号后面,表示为不匹配给定字符集中的任何一个字符。

限定范围和否定
正则表达式模式 匹配的字符串 备注
m.[0-9] 字母m后面跟着任何一个字符,然后跟着一个数字  
[^aeiou] 匹配一个非元音字符  
[^\t\n] 不匹配制表符或者/n  
["-a] 在ASCII系统中,所有字符位于“ ”和“a”之间 即在34-97之间

对于匹配的次数我们需要了解一下什么是贪婪匹配;

贪婪匹配:顾名思义,贪婪的匹配所有符合的字符串,

非贪婪模式:使用问号(?)去贪婪,匹配尽可能少的字符,尽可能留下多的字符给后面的模式(如果存在)。

3、正则表达式与Python

Python语言通过re模块支持正则表达式。下面我们就以通俗的语言介绍一下re模块的一些核心函数和方法,当然具体使用方法可以参考官方文档;

常见的正则表达式属性
函数/方法 描述 备注
compile(patter,flags=0) 编译正则表达式,返回一个正则表达式对象。  
match(patter,string,flags=0) 从起始位置开始匹配 成功的话,返回匹配对象
search(patter,string,flags=0) 搜索字符串中包含的要匹配的字符串  
findall(patter,string,[.flags]) 查询全部的非重复情况 返回一个列表,包含所有的成功匹配的部分
finditer(patter,string,[.flags])   在匹配对象中迭代
spilt(patter,string,max=0) 分割字符串 返回分割后的列表
re模块函数和正则表达式对象方法
sub(patter,repl,string,count=0) 搜索和替换 subn()还返回了一个替换的总数
purge()    
常用的匹配对象方法
group(num=0) 返回整个匹配对象,或特定子组

输出匹配成功的字符串

\n,n表示分组编号,可以转换顺序。

groups(default=None)  返回一个元组

获取所有匹配成功的子组

无子组则返回为空

groupdict(default=None)    
常用的模块属性
re.I 不区分大小写  
re.L    
re.M    
re.S    
re.X    
扩展符号
(?:) 进行分组但不保存  
     

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Python,python,正则表达式,编程语言)