Python3正则表达式

  • 正则表达式是一个特殊的字符序列,他能帮助你方便的检查一个字符串是否与某种模式匹配。

 

re.match函数

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回一个none。

 

函数语法:

re.match(pattern,string,flags=0)

 

函数参数说明:

参数

描述

pattern

匹配的正则表达式

string

要匹配的字符串

flags

标志位,用于控制正则表达式的匹配方式

 

匹配成功re.search方法返回一个匹配的对象,否则返回None

我们可以使用group(num)或groups()匹配对象函数来获取匹配表达式。

匹配对象方法

描述

group(num=0)

匹配整个表达式的字符串,group()可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应的元组

groups()

返回一个包含所有小组字符串的元组,从1到所含小组号。

 

 

 

 

 

 

re.match和re.search的区别

re.match只匹配字符串的开始,如果字符串开始就不符合正则表达式,则匹配失败,函数返回None,而re.search匹配整个字符串,直到找到一个匹配。

 

 

 

检索和替换

 

Python的re模块提供了re.sub用于替换字符串中的匹配项。

 

语法:

re.sub(pattern,repl,string,count=0,flags=0)

参数:

  • l  pattern:  正则中的模块字符串。
  • l  repl:       替换的字符串,也可为一个函数
  • l  string:     要被查找替换的原始字符串
  • l  count:    模式匹配后替换的最大次数 默认0表示替换所有匹配
  • l  flags:      编译时用的匹配模块,数字形式

 

前三个为必选项,后两个为可选参数。

 

 

 

repl参数是一个函数

将字符串中匹配的数字乘以2

 

 

 

compile函数:

compile函数用于编译正则表达式,生成一个正则表达式(Pattern对象),供match()和search()这两个函数使用。

语法格式如下:

re.compile(pattern[,flags])

 

参数:

  • l  pattern:  一个字符串的正则表达式
  • l  flags:      可选,表示匹配模式,比如忽略大小写,多行模式等。
  • l  re.l:      忽略大小写
  • l  re.L:        表示特殊字符集, \w,\W,\b,\B,\s,\S
  • l  re.M       多行模式
  • l  re.S        即为 ‘ . ’并且包括换行符在内的任意字符(‘ . ’ 不包括换行符)
  • l  re.U        即为特殊字符集,\w,\W,\b,\B,\d,\D,\s,\S以来于Unicode字符属性数据库
  • l  re.X        为了增加可读性,忽略空格和’#’后面的注释
##compile.py
import re
pattern = re.compile(r'\d+')                        #用于匹配至少一个数字
m = pattern.match('one12twothree34four')        #查找头部,没有匹配
print (m)m = pattern.match('one12twothree34four',2,10)    #从’e’位置开始查找,没有匹配
print (m)m = pattern.match('one12twothree34four',3,10)    #从‘1’位置开始查找,正好匹配
print(m)                                        #返回一个Match对象print(m.group(0))                                #可省略0,以下相同
print(m.start(0))
print(m.end(0))
print(m.span(0))

运行结果:

exbot@ubuntu:~/workspace/python/20190917$ vim compile.py

exbot@ubuntu:~/workspace/python/20190917$ python3 compile.py

None

None

<_sre.SRE_Match object; span=(3, 5), match='12'>

12

3

5

(3, 5)

上述代码中当匹配成功时返回一个Match对象,其中:

  • group([group1,…])方法用于获取一个或多个分组匹配的字符串,当要获取整个匹配的字串时,可直接使用group()或group(0)
  • start([group])方法用于获取分组匹配的字串在整个字符串的起始位置(子串第一个字符索引),默认参数为0。
  • end([group])方法用于获取分组匹配的子串在整个字符串的结束位置(子串最后一个字符的索引+1),默认参数为0
  • span([group])方法返回(start(group),end(group))

 

 

findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回一个空表

注意:match和search时匹配一次,findall时匹配所有。

语法格式:

re.findall(string[, pos[, endpos]])

参数:

  • l  string     带匹配的字符串
  • l  pos         可选参数,指定字符串的起始位置,默认0
  • l  endpos   可选参数,指定字符串结束位置,默认为字符串长度

查找字符串中所有数字:

 

 

re.finditer

和findall类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

re.finditer(pattern,string,flags=0)

 

参数:

  • pattern:      匹配的正则表达式
  • string:         要匹配的字符串
  • flags       :          标志位,用于控制正则表达式的匹配方式

 

 

re.spilt

spilt方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:

re.split(pattern,string[, maxsplit = 0,flags = 0])

 

参数:

  • pattern:      要匹配的正则表达式
  • string:         要匹配的字符串
  • maxsplit:     分割次数,maxsplit=1分隔一次,默认为0,不限制次数
  • flags:          标志位,用于控制正则表达式的匹配方式

 

 

正则表达式对象:

 

re.RegexObject

re.compile()返回RegexObject对象

 

re.MatchObject

l  group()返回被RE匹配的字符串

l  start():  返回匹配的开始的位置

l  end():   返回匹配结束的位置

l  span():    返回一个元组包含匹配的位置

 

正则表达式修饰符-可选标识

 

正则表达式可以包含一些可选修饰符来控制匹配的模式修饰符被指定为一个可选的标识,多个标志可以通过按位OR(|)它们来指定。

修饰符

描述

re.I

使匹配对大小写不敏感

re.L

做本地化识别匹配

re.M

多行匹配,影响^和$

re.S

使 . 匹配包括换行符在内的所有字符

re.U

根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B

re.X

该标识通过给予你更灵活的格式以便你将正则表达式写的更易于理解

 

正则表达式模板:

模式字符串使用特殊的语法来标识一个正则表达式:

字母和数字标识他们本身,一个正则表达式中的字母和数字匹配同样的字符串。

多数字母和数字前加一个反斜杠会拥有不同的含义。

标点符号只有被转义时才匹配自身,否则他们标识特殊的含义。

反斜杠本身需要反斜杠转义。

由于正则表达式通常都包含反斜杠,所以最后使用原有字符串来标识他们。模式元素如(r’\t’,等价于\\t)匹配相应的特殊字符。

下标列出了正则表达式模式语法中的特殊元素。如果你使用了模式的同时,提供了可选标志参数,某些模式元素的含义会改变。

^

匹配字符串开头

$

匹配字符串结尾

.

匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符在内的任意字符

[...]

用来标识一组字符,单独列出:[amk]匹配‘a’,’m’或’k’

[^...]

不在[]中的字符:[^abc]匹配除了a,b,c之外的字符

re*

匹配0个或多个表达式

re+

匹配1个或多个表达式

re?

匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

re{ n}

匹配n个前面表达式。例如:”o{2}”不能匹配“Bob”中的“o”,但是可以匹配“food”中的两个“o”

re{ n,}

精确匹配n个前面的表达式。例如”o{2,}”不能匹配“Bob“中的”o“,但能匹配”fooood“中的所有”o“。”o{1,}“等价于”o+“。”o{0,}“则等价”o*“

re{ n,m}

匹配n到m次由前面的正则表达式定义的片段,贪婪方式

a| b

匹配a或b

(re)

匹配括号内的表达式,也表示一个组

(?imx)

正则表达式包含三种可选项,i,m,x。只影响括号中的区域

(?-imx)

正则表达式关闭i,m,x的可选标志,只影响括号中的区域。

(?:re)

类似(...),但是不表示一个组

(?imx:re)

在括号李使用i,m,x可选标示

(?-imx:re)

在括号中不使用i,m,x的可选标志

(?#...)

注释

(?=re)

前向肯定界定符。如果所含正则表达式,以...表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边

(?!re)

前向否定界定符。与肯定的界定符相反;当所含表达式不能在字符串当前位置匹配时成功

(?>re)

匹配的独立模式,省去回溯

\w

匹配数字字母下划线

\W

匹配非数字字母下划线

\s

匹配任意空白字符,等价[\t\n\r\f]

\S

匹配任意非空字符

\d

匹配任意数字,等价于[0-9]

\D

匹配任意非数字

\A

匹配字符串开始

\Z

匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串

\z

匹配字符串结束

\G

匹配最后匹配完成的位置

\b

匹配一个单词边界,也就是指单词和空格间的位置例如,‘er\b’可以匹配”never”中的’er’,不能匹配“verb“中的’er’

\B

匹配非单词边界。‘er\B’能匹配“verb“中的‘er’,但不能匹配”never“中的‘er’

\n,\t等

匹配一个换行符,匹配一个制表符等

\1...\9

匹配第n个分组

\10

匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式

 

 

正则表达式实例:

 

字符匹配

python

匹配“python“

字符类

 

实例

描述

[Pp]ython

匹配“Python“或“python”

rub[ye]

匹配“ruby“或”rube”

[aeiou]

匹配括号里任意一个字母

[0-9]

匹配任何数字

[a-z]

匹配任何小写字母

[A-Z]

匹配任何大写字母

[a-zA-Z0-9]

匹配任何字母和数字

[^aeiou]

除了aeiou字母以外的所有字符

[^0-9]

匹配除了数字以外的字符

 

特殊字符类

实例

描述

.

匹配除“\n”之外的任何单个字符,要匹配包括’\n’在内的任何字符,情使用像‘[.\n]’的模式

\d

匹配一个数字字符,等价[0-9]

\D

匹配一个非数字字符,等价[^0-9]

\s

匹配任何空白字符,包括空格、制符表、换页符等等。等价于[\f\n\t\r]

\S

匹配任何非空白字符。等价[^\f\n\t\r]

\w

匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9]’

\W

匹配任何非单词字符,等价于’[^A-Za-z0-9]’

转载于:https://www.cnblogs.com/wanghao-boke/p/11542719.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++输入

fgets(str,n,stdin) 从键盘输入一行&#xff0c;替代gets()。读取到n-1字节时或换行符时终止&#xff0c;如果是文件的话&#xff0c;读到文件结尾也会停止 getline(cin,str) str的类型必须是string类&#xff0c;它是C特定的字符串类&#xff0c;区别于C的char *数据类型。 ci…

strlen和sizeof的区别

C语言中没有字符串&#xff0c;用的是字符数组来模拟字符串。 C风格的字符串时字符数组然后在末尾加0表示结尾。 在C语言中有strlen和sizeof两个函数求字符数组的长度函数&#xff0c;他们俩的区别就是是否把最后的结束标志也加上去。 strlen是不加的&#xff0c;他表示字符串的…

shell编程练习题

求2个数之和计算1-100的和将一目录下所有的文件的扩展名改为bak编译当前目录下的所有.c文件&#xff1a;打印root可以使用可执行文件数&#xff0c;处理结果: roots bins: 2306打印当前sshd的端口和进程id&#xff0c;处理结果: sshd Port&&pid: 22 5412输出本机创建20…

shell编程题(一)

求2个数之和 #!/bin/bashfunction add {if(( $# < 2 )); thenecho "The arg int correct"elsesum$(($1$2))echo $sumfi }add 1 add 1 2 运行结果&#xff1a; exbotubuntu:~/shareWin/linux/shell$ ./sum.sh 1 2The arg int correct3 $#&#xff1a;相当于C语言…

vimset

vim ~./vimrc set nocompatible "去掉有关vi一致性模式&#xff0c;避免以前版本的bug和局限 set nu! "显示行号 set guifontLuxi/ Mono/ 9 " 设置字体&#xff0c;字体名称和字号 filetype on …

shell编程题(二)

计算1-100之和 #!/bin/bashsum0 for i in seq 1 100;do #符号不是单引号 是 1左边的符号sum$[$i $sum ] done echo $sum #!/bin/bashi0 n1              #定义循环变量 while [ $n -lt 101 ];do  #循环变量小于101 i$(( $i $n))        #累加 n$(( …

vim命令大全

1. vim模式 正常模式&#xff08;按Esc或Ctrl[进入&#xff09; 左下角显示文件名或为空 插入模式&#xff08;按i进入&#xff09; 左下角显示--INSERT-- 可视模式&#xff08;按v进入&#xff09; 左下角显示--VISUAL-- 替换模式&#xff08;按r或R开始&#xff09; 左下角显…

signal()函数

函数原型 void (*signal(int sig,void(*func)(int)))(int); 指定使用sig指定的信号编号处理信号的方法。参数func指定程序可以处理信号的三种方式之一&#xff1a; l 默认处理(SIG_DFL)&#xff1a; 信号由该特定信号的默认动作处理l 忽略信号&#xff08;SIG_IGN&a…

setitimer()函数

定时器时间函数 struct itimerval&#xff1a;struct itimerval *new_value&#xff0c;其定义如下&#xff1a;struct itimerval {struct timeval it_interval; /*next value*/struct timeval it_value; /*current value*/};struct timeval {long tv_sec; /*seconds*/lonng t…

shell编程题(三)

将一目录下所有的文件的扩展名改为bak #! /bin/bashfor i in ls domv $i ${i%%.*}.bak done ${i%%.*} 截掉一个变量字符串第一个"."以及其右侧的所有字符&#xff0c;即最短前缀匹配。 #! /bin/bashdir./ #指定文件夹for file in $dir*.txt #指定文件夹下面文件类型…

VMware安装VMwaretools

默认点击“安装VMware Tools&#xff08;T&#xff09;”选项下载好安装包 下载的安装包放在计算机的media目录下 进入/media/ubuntu14-04/VMware Tools目录&#xff1a; cd /media/ubuntu14-04/VMware Tools 将安装包复制到tmp文件夹下&#xff1a; cp VMwareTools-10.0.5-322…

shell编程题(四)

编译当前目录下的所有.c文件 #!/bin/bashif [ $# -lt 1 ] ;then #如果输入参数小于1则报错 $# C语言中的argv[0] 输入参数个数echo "Please follow up file.c!"echo "eg: ./make.sh xxx.c"exit fiif [[ $2 "debug" ]] ;then #如果第三个参数…

stat函数

int lstat(const char *path,struct stat*buf) 当文件是一个符号链接时&#xff0c;lstat返回的是该符号链接本身的信息&#xff0c;而stat返回的是该链接指向的文件的信息。 struct stat {dev_t st_dev; //设备号码ino_t st_ino; //inode节点号mo…

字符串函数参数传入传出(字符串反转)

/*** strstr.c ***/ #include<stdio.h> #include<string.h>//求字符串p中abcd出现的次数 //自定义函数接口完成业务函数和main函数分开 int getCount(char *mystr,char *sub,int *ncount) {int ret 0;if(mystr NULL || sub NULL || ncount NULL){ret -1;print…

字符串函数参数传入传出(去空格)

字符串作为函数参数传入传出 /*** delSpace.c ***/ #include<stdio.h> #include<string.h>int DelSpace(char *str) {int iRet -1;int i ;int j ;int ncount 0;char *out str;if(NULL str ){printf("the point in is NULL\n");return iRet;}i 0;j …

字符串的规范使用

有一个字符串”1a2b3d4z”,&#xff1b; 要求写一个函数实现如下功能&#xff0c; 功能1&#xff1a;把偶数位字符挑选出来&#xff0c;组成一个字符串1。valude&#xff1b;20分 功能2&#xff1a;把奇数位字符挑选出来&#xff0c;组成一个字符串2&#xff0c;valude 20 功能…

字符串的规范使用(二)

键值对&#xff08;”key valude”&#xff09;字符串&#xff0c;在开发中经常使用&#xff1b; 要求1&#xff1a;请自己定义一个接口&#xff0c;实现根据key获取valude&#xff1b;40分 要求2&#xff1a;编写测试用例。30分 要求3&#xff1a;键值对中间可能有n多空格&am…

字符串逆序打印

版本1 两个指针从头到尾和从尾到头交换内容逆序 /*** str_reverse.c ***/ #include<stdio.h> #include<string.h>int main() {char buf[] "abcdrfg";int len strlen(buf);char *p1 buf;char *p2 buf len - 1;while(p1 < p2){char c *p1;*p1 *p…

realloc()函数

原型&#xff1a;extern void *realloc(void *mem_address, unsigned int newsize); 参数&#xff1a; mem_address&#xff1a; 要改变内存大小的指针名newsize &#xff1a; 新的内存大小。 如果分配内存减少&#xff0c;realloc仅仅改变索引的信息。 如果将…

fgets()函数

声明&#xff1a;  char *fgets(char *str&#xff0c;int n,FILE* stream) 参数&#xff1a;  str—这是指向一个字符数组的指针&#xff0c;该数组存储了要读取的字符串 n – 这是要读取的最大字符数&#xff08;包括最后的空字符&#xff09;。通常是使用以str传递的数组…