Python正则表达式有什么好处,基础操作有哪些
Admin 2022-11-12 群英技术资讯 271 次浏览
今天我们来学习关于“Python正则表达式有什么好处,基础操作有哪些”的内容,下文有详解方法和实例,内容详细,逻辑清晰,有需要的朋友可以参考,希望大家阅读完这篇文章后能有所收获,那么下面就一起来了解一下吧。
正则表达式是一个特殊的字符序列,可以帮助您使用模式中保留的专门语法来匹配或查找其他字符串或字符串集。 正则表达式在UNIX世界中被广泛使用。
注:很多开发人员觉得正则表达式比较难以理解,主要原因是缺少使用或不愿意在这上面花时间。
re模块在Python中提供对Perl类正则表达式的完全支持。如果在编译或使用正则表达式时发生错误,则re模块会引发异常re.error。
在这篇文章中,将介绍两个重要的功能,用来处理正则表达式。 然而,首先是一件小事:有各种各样的字符,这些字符在正则表达式中使用时会有特殊的意义。 为了在处理正则表达式时避免混淆,我们将使用:r'expression'原始字符串。
匹配单个字符的基本模式
编号 | 表达式 | 描述 |
---|---|---|
1 | a, X, 9, < |
普通字符完全匹配。 |
2 | . |
匹配任何单个字符,除了换行符’\n ‘ |
3 | \w |
匹配“单词”字符:字母或数字或下划线[a-zA-Z0-9_] 。 |
4 | \W |
匹配任何非字词。 |
5 | \b |
字词与非字词之间的界限 |
6 | \s |
匹配单个空格字符 : 空格,换行符,返回,制表符 |
7 | \S |
匹配任何非空格字符。 |
8 | \t , \n , \r |
制表符,换行符,退格符 |
9 | \d |
十进制数[0-9] |
10 | ^ |
匹配字符串的开头 |
11 | $ |
匹配字符串的末尾 |
12 | \ |
抑制字符的“特殊性”,也叫转义字符。 |
编译标志可以修改正则表达式的某些方面。标志在re模块中有两个名称:一个很长的名称,如IGNORECASE,和一个简短的单字母形式,如。
编号 | 标志 | 含义 |
---|---|---|
1 | ASCII, A | 像\w ,\b ,\s 和\d 之间的几个转义只匹配ASCII字符与相应的属性。 |
2 | DOTALL, S | 匹配任何字符,包括换行符 |
3 | IGNORECASE, I | 不区分大小写匹配 |
4 | LOCALE, L | 做一个区域感知的匹配 |
5 | MULTILINE, M | 多行匹配,影响^ 和$ |
6 | VERBOSE, X (for ‘extended’) | 启用详细的RE ,可以更干净,更容易理解 |
1.match函数
此函数尝试将RE模式与可选标志的字符串进行匹配。
下面是函数的语法 :
re.match(pattern, string, flags = 0)
这里是参数的描述 :
pattern : 这是要匹配的正则表达式。
string : 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
flags : 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。
re.match函数在成功时返回匹配对象,失败时返回None。使用match(num)或groups()函数匹配对象来获取匹配的表达式。
编号 | 匹配对象 | 描述 |
---|---|---|
1 | group(num = 0) |
此方法返回整个匹配(或特定子组num ) |
2 | groups() |
此方法返回一个元组中的所有匹配子组(如果没有,则返回为None ) |
示例
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print ("matchObj.group() : ", matchObj.group())
print ("matchObj.group(1) : ", matchObj.group(1))
print ("matchObj.group(2) : ", matchObj.group(2))
else:
print ("No match!!")
当执行上述代码时,会产生以下结果 :
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
2.search函数
此函数尝试将RE模式与可选标志的字符串进行匹配。
下面是这个函数的语法 :
re.match(pattern, string, flags = 0)
这里是参数的描述 :
pattern : 这是要匹配的正则表达式。
string : 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
flags : 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。
re.search函数在成功时返回匹配对象,否则返回None。使用match对象的group(num)或groups()函数来获取匹配的表达式。
编号 | 匹配对象 | 描述 |
---|---|---|
1 | group(num = 0) |
此方法返回整个匹配(或特定子组num ) |
2 | groups() |
此方法返回一个元组中的所有匹配子组(如果没有,则返回为None ) |
示例
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print ("searchObj.group() : ", searchObj.group())
print ("searchObj.group(1) : ", searchObj.group(1))
print ("searchObj.group(2) : ", searchObj.group(2))
else:
print ("Nothing found!!")
当执行上述代码时,会产生以下结果 :
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
3.匹配与搜索
Python提供基于正则表达式的两种不同的原始操作:match检查仅匹配字符串的开头,而search检查字符串中任何位置的匹配(这是Perl默认情况下的匹配)。
示例
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print ("match --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
print ("search --> searchObj.group() : ", searchObj.group())
else:
print ("Nothing found!!")
当执行上述代码时,会产生以下结果 :
No match!!
search --> matchObj.group() : dogs
4.搜索和替换
使用正则表达式re模块中的最重要的之一是sub。
模块
re.sub(pattern, repl, string, max=0)
此方法使用repl替换所有出现在RE模式的字符串,替换所有出现,除非提供max。此方法返回修改的字符串。
示例
#!/usr/bin/python3
import re
phone = "2018-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 : 2018-959-559
Phone Num : 2018959559
5.正则表达式修饰符:选项标志
正则表达式文字可能包含一个可选修饰符,用于控制匹配的各个方面。 修饰符被指定为可选标志。可以使用异或(|)提供多个修饰符,如前所示,可以由以下之一表示 :
编号 | 修辞符 | 描述 |
---|---|---|
1 | re.I |
执行不区分大小写的匹配。 |
2 | re.L |
根据当前语言环境解释单词。 这种解释影响字母组( |
3 | re.M |
使 并使 |
4 | re.S |
使一个句点(. )匹配任何字符,包括换行符。 |
5 | re.U |
根据Unicode字符集解释字母。 此标志影响 |
6 | re.X |
允许“cuter”正则表达式语法。 它忽略空格(除了一个集合 或者用反斜杠转义),并将未转义的 |
6.正则表达模式
除了控制字符(+ ? . * ^ $ ( ) [ ] { } | \),所有字符都与其自身匹配。 可以通过使用反斜杠将其转换为控制字符。
7.正则表达式示例
字符常量
编号 | 示例 | 说明 |
---|---|---|
1 | python | 匹配“python”。 |
字符类
编号 | 示例 | 说明 |
---|---|---|
1 | [Pp]ython |
匹配“Python”或“python” |
2 | rub[ye] |
匹配“ruby”或“rube” |
3 | [aeiou] |
匹配任何一个小写元音 |
4 | [0-9] |
匹配任何数字; 如[0123456789] |
5 | [a-z] |
匹配任何小写ASCII字母 |
6 | [A-Z] |
匹配任何大写的ASCII字母 |
7 | [a-zA-Z0-9] |
匹配上述任何一个 |
8 | [^aeiou] |
匹配除小写元音之外的任何东西 |
9 | [^0-9] |
匹配数字以外的任何东西 |
特殊字符类
编号 | 示例 | 说明 |
---|---|---|
1 | . |
匹配除换行符以外的任何字符 |
2 | \d |
匹配数字:[0-9] |
3 | \D |
匹配非数字:[^0-9] |
4 | \s |
匹配空格字符:[\t\r\n\f] |
5 | \S |
匹配非空格:[^\t\r\n\f] |
6 | \w |
匹配单字字符: [A-Za-z0-9_] |
7 | \W |
匹配非单字字符: [A-Za-z0-9_] |
重复匹配
编号 | 示例 | 说明 |
---|---|---|
1 | ruby? |
匹配“rub”或“ruby”:y 是可选的 |
2 | ruby* |
匹配“rub”加上0 个以上的y |
3 | ruby+ |
匹配“rub”加上1 个或更多的y |
4 | \d{3} |
完全匹配3 位数 |
5 | \d{3,} |
匹配3 位或更多位数字 |
6 | \d{3,5} |
匹配3,4或5位数 |
非贪婪重复
这匹配最小的重复次数 :
编号 | 示例 | 说明 |
---|---|---|
1 | <.*> |
贪婪重复:匹配“<python> perl> ” |
2 | <.*?> |
非贪婪重复:在“<python> perl ”中匹配“<python> ” |
编号 | 示例 | 说明 |
---|---|---|
1 | \D\d+ |
没有分组:+ 重复\d |
2 | (\D\d)+ |
分组:+ 重复\D\d 对 |
3 | ([Pp]ython(,)?)+ |
匹配“Python”,“Python,python,python”等 |
反向引用
这与以前匹配的组再次匹配 :
编号 | 示例 | 说明 |
---|---|---|
1 | ([Pp])ython&\1ails |
匹配python和pails或Python和Pails |
2 | (['"])[^\1]*\1 |
单引号或双引号字符串。\1 匹配第一个分组匹配。 \2 匹配任何第二个分组匹配等 |
备择方案
python|perl : 匹配“python”或“perl”
rub(y|le) : 匹配 “ruby” 或 “ruble”
Python(!+|\?) : “Python”后跟一个或多个! 还是一个?
锚点
这需要指定匹配位置。
编号 | 示例 | 说明 |
---|---|---|
1 | ^Python |
在字符串或内部行的开头匹配“Python” |
2 | Python$ |
在字符串或内部行的结尾匹配“Python” |
3 | \APython |
在字符串的开头匹配“Python” |
4 | Python\Z |
在字符串的末尾匹配“Python” |
5 | \bPython\b |
在字词的边界匹配“Python” |
6 | \brub\B |
\B 是非字词边界:在“rube”和“ruby”中匹配“rub”,而不是单独匹配 |
7 | Python(?=!) |
匹配“Python”,如果跟着感叹号。 |
8 | Python(?!!) |
匹配“Python”,如果没有感叹号后面。 |
带括号的特殊语法
编号 | 示例 | 说明 | |
---|---|---|---|
1 | R(?#comment) |
匹配“R”。其余的都是注释 | |
2 | R(?i)uby |
匹配“uby”时不区分大小写 | |
3 | R(?i:uby) |
同上 | |
4 | `rub(?:y | le))` | 仅组合而不创建\1 反向引用 |
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了Python小波变换去噪,对于去噪效果好坏的评价,常用信号的信噪比(SNR)与估计信号同原始信号的均方根误差(RMSE)来判断,需要的朋友可以参考下
这篇文章主要介绍了python如何实现过滤敏感词,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
这篇文章主要介绍了Python3 中return和yield的区别,return和yield都用来返回值;在一次性地返回所有值场景中return和yield的作用是一样的,但是具体有什么区别呢,带着疑问一起进入下面文章学习详细内容吧
这篇文章主要介绍了Python中Async语法协程的实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
Python装饰器适合什么场景?用法是什么?一些新手可能对于Python装饰器还不是很了解,对此这篇文章就给大家来介绍一下Python装饰器,下文有对Python装饰器的介绍以及实例,感兴趣的朋友就往下看吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008