首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用正则表达式

使用正则表达式

原创
作者头像
用户8442333
修改2021-05-19 15:51:18
修改2021-05-19 15:51:18
8480
举报
文章被收录于专栏:python知识python知识

正则表达式相关知识

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就是用于描述这些规则的工具,换句话说正则表达式是一种工具,它定义了字符串的匹配模式(如何检查一个字符串是否有跟某种模式匹配的部分或者从一个字符串中将与模式匹配的部分提取出来或者替换掉)。如果你在Windows操作系统中使用过文件查找并且在指定文件名时使用过通配符(*和?),那么正则表达式也是与之类似的用来进行文本匹配的工具,只不过比起通配符正则表达式更强大,它能更精确地描述你的需求(当然你付出的代价是书写一个正则表达式比打出一个通配符要复杂得多,要知道任何给你带来好处的东西都是有代价的,就如同学习一门编程语言一样),比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像028-12345678或0813-7654321),这不就是国内的座机号码吗。最初计算机是为了做数学运算而诞生的,处理的信息基本上都是数值,而今天我们在日常工作中处理的信息基本上都是文本数据,我们希望计算机能够识别和处理符合某些模式的文本,正则表达式就显得非常重要了。今天几乎所有的编程语言都提供了对正则表达式操作的支持,Python通过标准库中的re模块来支持正则表达式操作。

我们可以考虑下面一个问题:我们从某个地方(可能是一个文本文件,也可能是网络上的一则新闻)获得了一个字符串,希望在字符串中找出手机号和座机号。当然我们可以设定手机号是11位的数字(注意并不是随机的11位数字,因为你没有见过“25012345678”这样的手机号吧)而座机号跟上一段中描述的模式相同,如果不使用正则表达式要完成这个任务就会很麻烦。

符号

解释

示例

说明

.

匹配任意字符

b.t

可以匹配bat / but / b#t / b1t等

\w

匹配字母/数字/下划线

b\wt

可以匹配bat / b1t / b_t等但不能匹配b#t

\s

匹配空白字符(包括\r、\n、\t等)

love\syou

可以匹配love you

\d

匹配数字

\d\d

可以匹配01 / 23 / 99等

\b

匹配单词的边界

\bThe\b

^

匹配字符串的开始

^The

可以匹配The开头的字符串

$

匹配字符串的结束

.exe$

可以匹配.exe结尾的字符串

\W

匹配非字母/数字/下划线

b\Wt

可以匹配b#t / b@t等但不能匹配but / b1t / b_t等

\S

匹配非空白字符

love\Syou

可以匹配love#you等但不能匹配love you

\D

匹配非数字

\d\D

可以匹配9a / 3# / 0F等

\B

匹配非单词边界

\Bio\B

[]

匹配来自字符集的任意单一字符

[aeiou]

可以匹配任一元音字母字符

[^]

匹配不在字符集中的任意单一字符

[^aeiou]

可以匹配任一非元音字母字符

*

匹配0次或多次

\w*

+

匹配1次或多次

\w+

?

匹配0次或1次

\w?

{N}

匹配N次

\w{3}

{M,}

匹配至少M次

\w{3,}

{M,N}

匹配至少M次至多N次

\w{3,6}

|

分支

foo|bar

可以匹配foo或者bar

(?#)

注释

(exp)

匹配exp并捕获到自动命名的组中

(?<name>exp)

匹配exp并捕获到名为name的组中

(?:exp)

匹配exp但是不捕获匹配的文本

(?=exp)

匹配exp前面的位置

\b\w+(?=ing)

可以匹配I'm dancing中的danc

(?<=exp)

匹配exp后面的位置

(?<=\bdanc)\w+\b

可以匹配I love dancing and reading中的第一个ing

(?!exp)

匹配后面不是exp的位置

(?<!exp)

匹配前面不是exp的位置

*?

重复任意次,但尽可能少重复

a.*ba.*?b

将正则表达式应用于aabab,前者会匹配整个字符串aabab,后者会匹配aab和ab两个字符串

+?

重复1次或多次,但尽可能少重复

??

重复0次或1次,但尽可能少重复

{M,N}?

重复M到N次,但尽可能少重复

{M,}?

重复M次以上,但尽可能少重复

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正则表达式相关知识
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档