前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python--模块之re正则表达式

python--模块之re正则表达式

作者头像
py3study
发布2020-01-20 16:46:10
6840
发布2020-01-20 16:46:10
举报
文章被收录于专栏:python3python3

简介:

正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。

正则表达式基础知识:

--普通字符 匹配自身 abc ----abc

--元字符

. :匹配任何字符(\n)换行符除外 例:a.a -----aba

\ :转义字符 例:a\tb ---a b

* :匹配前一个字符0或多次 例:a*b ----aaaab;b

+ :匹配前一个字符1次或多次 例:a+b ----aaaab;ab

? :匹配一个字符0次或1次 例:a?b ---b;ab

^ :匹配字符串开头,多行匹配每一行开头 例:^ab ---ab

$ :匹配字符串末尾,多行匹配每一行末尾 例:ab$ ---ab;cb

reg1 | reg2 :匹配正则表达式reg1或reg2 例:foo | bar ---foo;bar

{} : a{m}匹配字符m次,a{m,n}匹配字符m至n次,若省略n,则匹配m至无限次 例:a{1,2}b ---aab

[] :字符集,对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[^abc]表示取反,即非abc. 注:所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊含义。 例:a[bcd]e ---abcde

() :最基本的组是由一对圆括号括起来的正则式。 例:(abc){2}a(2|4)d ---abcabca4d

--特殊字符

\d :数字1~9 例:a\db ---a1b

\D:非数字[^\d] 例:a\Dc ----abc

\s:匹配任意空白字符[ \t\r\n\f\v] 例:a\sb ---a b

\S:非空白字符[^\s] 例:a\Sb ---abc

\w:匹配包括下划线在内的任意字符[A-Za-z0-9_] 例:a\wc ---abc

\W:匹配非单词字符[^A-Za-z0-9_] 例:a\Wb ---a b

\A:仅匹配字符串开头,同^ 例:\Aabc ---abc

\Z:仅匹配字符串末尾,同$ 例:abc\Z ----abc

\B:匹配\w和\W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。 例:’er\b‘ 可以匹配’never‘ 中的’er‘,但不能匹配’verb‘中的’er‘

\B:[^\b] 例:a\Bbc ---abc

正则表达式的常用函数:

match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法: group():返回被re匹配的字符串 可以一次输入多个组号,对应组号匹配的 字符串

start():返回匹配开始的位置 end():返回匹配结束的位置 spend():返回一个元组包含匹配(开始,结束)的位置

1、compile() 编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率) re.compile(pattern,flags=0) pattern:编译时用的表达式字符串。 flags:编译标志位,用于修正正则表达式的匹配方式,如:是否区分大小写,多行匹配等,常用的flags有:

re.S(DOTALL):使‘.’特殊字符匹配任何字符,包括换行;如果没有此标志,‘.’将匹配任何内容除换行符。

re.I(IGNORECASE):使匹配对大小写不敏感。

re.L(LOCALE):做本地化识别(locale-aware)匹配

re.M(MULTILINE):多行匹配,影响^和$

re.X(VERBOSE):该标志通过给予更灵活的格式以便将正则表达式写的更易于理解

re.U:根据Unicode字符集解析字符,这个标识影响\w,\W,\b,\B

2、match() 决定re是否在字符串刚开始的位置匹配。 注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符‘$’ 格式:re.match(pattern,string,flags=0)

例: print(re.match('com','comwww.runcomoob').group()) print(re.match('com','Comwww.runcomoob',re.I).group())

>>com >>Com

3、search() re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None 格式:re.search(pattern,string,flags=0)

例: print(re.search('\dcom','4com5com').group())

>>4com

4,findall() re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。 格式: re.findall(pattern,string,flags=0) 例1: p=re.compile(r'\d+') print(p.findall('h32h3jh2uhr23'))

>>['32', '3', '2', '23']

5、finditer() 搜索string,返回一个顺序访问每一个匹配结果(match)对象的迭代器。找到re匹配的所有字符串,并把它们作为一个迭代器返回。 格式: re.finditer(pattern,string,flags=0) 例: iter=re.finditer(r'\d+','12gjh232jkg34') for i in iter: print(i) print(i.group()) print(i.span()) #返回迭代器对象;匹配数值;位置 >><_sre.SRE_Match object; span=(0, 2), match='12'> 12 (0, 2) >><_sre.SRE_Match object; span=(5, 8), match='232'> 232 (5, 8) >><_sre.SRE_Match object; span=(11, 13), match='34'> 34 (11, 13)

6、split() 按照能够匹配的字符串string分割后返回列表。 可以使用re.split来分割字符串,如:re.split(r'\s+',text);将字符串按空格分割成一个列表。 格式: re.split(pattern,string,maxsplit=0,flags=0) 例: print(re.split('\d+','ont1two2three3four4five5',3)) >>['ont', 'two', 'three', 'four4five5']

7、sub() 使用re替换string中每个匹配的字符串返回后的值。 格式: re.sub(pattern,repl,string,count) 例: text='ont1two2three3four4five5' print(re.sub(r'\d+',' ',text)) >>ont two three four five

8、subn() 返回替换次数 格式: subn(pattern,repl,string,count=0,flags=0) 例: print(re.subn(r'\d',' ','ont1two2three3four4five5')) >>('ont two three four five ', 5)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档