Python re模块介绍
admin
2023-07-31 02:10:42
0

Python中转义字符

正则表达式使用反斜杠” \\ “来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用” \\\\\\\\ “表示正则表达式中的” \\ “,因为正则表达式中如果要匹配” \\ “,需要用\\来转义,变成” \\\\ “,而Python语法中又需要对字符串中每一个\\进行转义,所以就变成了” \\\\\\\\ “。
上面的写法是不是觉得很麻烦,为了使正则表达式具有更好的可读性,Python特别设计了原始字符串(raw string),需要提醒你的是,在写文件路径的时候就不要使用raw string了,这里存在陷阱。raw string就是用\’r\’作为字符串的前缀,如 r”\\n”:表示两个字符”\\”和”n”,而不是换行符了。Python中写正则表达式时推荐使用这种形式。

正则表达式元字符说明

.  匹配除换行符以外的任意字符
^  匹配字符串的开始
$  匹配字符串的结束
[] 用来匹配一个指定的字符类别
?  对于前一个字符字符重复0次到1次
*  对于前一个字符重复0次到无穷次
{} 对于前一个字符重复m次
{m,n} 对前一个字符重复为m到n次
\\d 匹配数字,相当于[0-9]
\\D 匹配任何非数字字符,相当于[^0-9]
\\s 匹配任意的空白符,相当于[ fv]
\\S 匹配任何非空白字符,相当于[^ fv]
\\w 匹配任何字母数字字符,相当于[a-zA-Z0-9_]
\\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
\\b 匹配单词的开始或结束

模块函数说明即举例
re.compile 将正则表达式编译成pattern对象

compile(pattern, flags=0)

第一个参数:规则
第二个参数:标志位

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None

match(pattern, string, flags=0)

第一个参数:规则
第二个参数:表示要匹配的字符串
第三个参数:标致位,用于控制正则表达式的匹配方式

re.search 匹配整个字符串,直到找到一个匹配

search(pattern, string, flags=0)

第一个参数:规则
第二个参数:表示要匹配的字符串
第三个参数:标致位,用于控制正则表达式的匹配方式

>>> import re
>>> pattern = re.compile(r\'linuxeye\')
>>> match = pattern.match(\'jb51.net\')
>>> print match
<_sre.SRE_Match object at 0x7f4e96e61c60>
>>> print match.group()
linuxeye
>>> m = pattern.match(\'blog.jb51.net\') #match匹配开头,没找到
>>> print m
None
>>> m = pattern.search(\'blog.jb51.net\') #search匹配整个字符串,直到找到一个匹配
>>> print m
<_sre.SRE_Match object at 0x7f15abfc6b28>
>>> print m.group()
linuxeye
>>> m = re.match(r\'linuxeye\',\'jb51.net\') #不用re.compile
>>> print m
<_sre.SRE_Match object at 0x7f4e96e61b90>
>>> print m.group()
linuxeye
>>> m = re.match(r\'linuxeye\',\'www.jb51.net\')
>>> print m
None

re.split 用于来分割字符串

split(pattern, string, maxsplit=0)

第一个参数:规则
第二个参数:字符串
第三个参数:最大分割字符串,默认为0,表示每个匹配项都分割
实例:分割所有的字符串

>>> import re
>>> test_str = \"1 2 3 4 5\"
>>> re.split(r\'\\s+\',test_str)
[\'1\', \'2\', \'3\', \'4\', \'5\']
>>> re.split(r\'\\s+\',test_str,2) #分割前2个
[\'1\', \'2\', \'3 4 5\']
 
>>> test_str = \"1 . 2. 3 .4 . 5\"
>>> re.split(r\'\\.\',test_str)
[\'1 \', \' 2\', \' 3 \', \'4 \', \' 5\']
>>> re.split(r\'\\.\',test_str,3)
[\'1 \', \' 2\', \' 3 \', \'4 . 5\']

re.findall 在目标字符串查找符合规则的字符串

findall(pattern, string, flags=0)

第一个参数:规则
第二个参数:目标字符串
但三个参数:后面还可以跟一个规则选择项
返回的结果是一个列表,建中存放的是符合规则的字符串,如果没有符合规则的字符串呗找到,就会返回一个空值

>>> import re
>>> test_mail = \'  test03@gmail.net\'
>>> mail_re = re.compile(r\'\\w+@g....\\.[a-z]{3}\')
>>> re.findall(mail_re,test_mail)
[\'test01@gmail.com\', \'test02@gmail.org\', \'test03@gmail.net\']

re.sub 以正则表达式为基础的替换工作

sub(pattern, repl, string, count=0)

第一个参数:规则
第二个参数:替换后的字符串
第三个参数:字符串
第四个参数:替换个数。默认为0,表示每个匹配项都替换

>>> test = \'blog.jb51.net jb51.net\'
>>> test_re = re.compile(r\'\\.\')
>>> re.sub(test_re,\'--\',test)
\'blog--linuxeye--com linuxeye--com\'
>>> re.sub(test_re,\'--\',test,1)
\'blog--jb51.net jb51.net\'

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...