#指尖人生#Python常用模块:re模块

Posted 西鼠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#指尖人生#Python常用模块:re模块相关的知识,希望对你有一定的参考价值。

1、什么是正则?

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

2、常用匹配模式(元字符)

正则表达式分类:

  • 基本的正则表达式(Basic Regular Expression 又叫 ​Basic​ RegEx  简称 BREs)
  • 扩展的正则表达式(Extended Regular Expression 又叫 ​Extended ​RegEx 简称 EREs)
  • Perl 的正则表达式(Perl Regular Expression 又叫​ Perl ​RegEx 简称 PREs

#指尖人生#Python常用模块:re模块_git

import re

ret=re.findall("yu[a,b]n",123 yuan 34 an yubn) #[]多选已字符
ret=re.findall("[0-9]",yua 123 n 34 an yubn) #-范围
ret=re.findall("[a-zA-Z]",yua 123 n 34 an yubn)
ret=re.findall("[a-zA-Z]+",yua 123 n 34 an yubn) #+ 最大匹配?
ret=re.findall("[^0-9a-zA-Z ]+",yua 123lin n a34 an12 5yubn 中国) #^取反
ret=re.findall([\\u4e00-\\u9fa5]+,yua 123lin n a34 an12 5yubn 中国) #中文

#贪婪匹配:按着规则内最长的内容进行匹配 【​.*默认为贪婪匹配】

import re
print(re.findall(a.*b,a1b22222222b)) #[a1b22222222b]

#取消贪婪匹配:? 【 ​.*?为非贪婪匹配】推荐使用

print(re.findall(a.*?b,a1b22222222b)) #[a1b]

findall:

#fineall:关于分组优先提取、取消分组优先提取?: 、 ()分组
ret=re.findall(http://www.(\\w+).com,http://www.baidu.com http://www.jd.cn http://python.org)
ret=re.findall(http://www.(\\w+).(com|cn),http://www.baidu.com http://www.jd.cn http://python.org)

search:

# #search:查询匹配到的第一个结果,返回对象
ret=re.search(http://www.(?P<yuming>\\w+).com,http://www.baidu.com http://www.jd.com http://python.org)
ret=re.search((?P<xieyi>http)://www.(?P<yuming>\\w+).com,http://www.baidu.com http://www.jd.com http://python.org)
print(ret.group("xieyi"))
print(ret.group("yuming"))

match:

# #match:只匹配第一个
ret=re.match((?P<xieyi>http)://www.(?P<yuming>\\w+).com,http://www.baidu.com http://www.jd.com http://python.org)
print(ret.group("xieyi"))
print(ret.group("yuming"))

附:常见3中类型正则表达式比较

字符

说明

Basic RegEx

Extended RegEx

python RegEx

Perl regEx

转义


\\

\\

\\

\\

^

匹配行首,例如^dog匹配以字符串dog开头的行(注意:awk 指令中,^则是匹配字符串的开始)

^

^

^

^

$

匹配行尾,例如:^、dog$匹配以字符串 dog 为结尾的行(注意:awk 指令中,$则是匹配字符串的结尾)

$

$

$

$

^$

匹配空行

^$

^$

^$

^$

^string$

匹配行,例如:^dog$匹配只含一个字符串 dog 的行

^string$

^string$

^string$

^string$

\\<

匹配单词,例如:\\<frog (等价于\\bfrog),匹配以 frog 开头的单词

\\<

\\<

不支持

不支持​(但可以使用\\b来匹配单词,例如:\\bfrog)

\\>

匹配单词,例如:frog\\>(等价于frog\\b ),匹配以 frog 结尾的单词

\\>

\\>

不支持

不支持​(但可以使用\\b来匹配单词,例如:frog\\b)

\\<x\\>

匹配一个单词或者一个特定字符,例如:\\<frog\\>(等价于\\bfrog\\b)、\\<G\\>

\\<x\\>

\\<x\\>

不支持

不支持​(但可以使用\\b来匹配单词,例如:\\bfrog\\b

()

匹配表达式,例如:不支持(frog)

不支持​(但可以使用,如:​dog​dog

()

()

()


匹配表达式,例如:不支持(frog)

不支持​(同())

不支持​(同())

不支持​(同())

匹配前面的子表达式 0 次或 1 次(等价于0,1),例如:where(is)?能匹配"where" 以及"whereis"

不支持​(同\\?)

\\?

匹配前面的子表达式 0 次或 1 次(等价于\\0,1\\),例如:where​is​is​\\? 能匹配 "where"以及"whereis"

\\?

不支持​(同?)

不支持​(同?)

不支持​(同?)

?

当该字符紧跟在任何一个其他限制符(*, +, ?, n,n,, n,m) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",o+? 将匹配单个"o",而 o+ 将匹配所有 o

不支持

不支持

不支持

不支持

.

匹配除换行符(\\n)之外的任意单个字符(注意:awk 指令中的句点能匹配换行符)

.

.(如果要匹配包括“\\n”在内的任何一个字符,请使用:(^$)|(.)

.

.(如果要匹配包括“\\n”在内的任何一个字符,请使用: [.\\n]

*

匹配前面的子表达式 0 次或多次(等价于0, ),例如:zo* 能匹配 "z"以及 "zoo"

*

*

*

*

\\+

匹配前面的子表达式 1 次或多次(等价于\\1, \\),例如:where​is​is​\\+ 能匹配 "whereis"以及"whereisis"

\\+

不支持​(同+)

不支持​(同+)

不支持​(同+)

+

匹配前面的子表达式 1 次或多次(等价于1, ),例如:zo+能匹配 "zo"以及 "zoo",但不能匹配 "z"

不支持​(同\\+)

+

+

+

n

n 必须是一个 0 或者正整数,匹配子表达式 n 次,例如:zo2能匹配

不支持​(同\\n\\)

n

n

n

n,

"zooz",但不能匹配 "Bob"n 必须是一个 0 或者正整数,匹配子表达式大于等于 n次,例如:go2,

不支持​(同\\n,\\)

n,

n,

n,

n,m

能匹配 "good",但不能匹配 godm 和 n 均为非负整数,其中 n <= m,最少匹配 n 次且最多匹配 m 次 ,例如:o1,3将配"fooooood" 中的前三个 o(请注意在逗号和两个数之间不能有空格)

不支持​(同\\n,m\\)

n,m

n,m

n,m

x|y

匹配 x 或 y,例如: 不支持z|(food) 能匹配 "z" 或"food";(z|f)ood 则匹配"zood" 或 "food"

不支持​(同x\\|y)

x|y

x|y

x|y

[0-9]

匹配从 0 到 9 中的任意一个数字字符(注意:要写成递增)

[0-9]

[0-9]

[0-9]

[0-9]

[xyz]

字符集合,匹配所包含的任意一个字符,例如:[abc]可以匹配"lay" 中的 a(注意:如果元字符,例如:. *等,它们被放在[ ]中,那么它们将变成一个普通字符)

[xyz]

[xyz]

[xyz]

[xyz]

[^xyz]

负值字符集合,匹配未包含的任意一个字符(注意:不包括换行符),例如:[^abc] 可以匹配 "Lay" 中的L(注意:[^xyz]在awk 指令中则是匹配未包含的任意一个字符+换行符)

[^xyz]

[^xyz]

[^xyz]

[^xyz]

[A-Za-z]

匹配大写字母或者小写字母中的任意一个字符(注意:要写成递增)

[A-Za-z]

[A-Za-z]

[A-Za-z]

[A-Za-z]

[^A-Za-z]

匹配除了大写与小写字母之外的任意一个字符(注意:写成递增)

[^A-Za-z]

[^A-Za-z]

[^A-Za-z]

[^A-Za-z]

\\d

匹配从 0 到 9 中的任意一个数字字符(等价于 [0-9])

不支持

不支持

\\d

\\d

\\D

匹配非数字字符(等价于 [^0-9])

不支持

不支持

以上是关于#指尖人生#Python常用模块:re模块的主要内容,如果未能解决你的问题,请参考以下文章

#指尖人生#Python常用模块:time与datetime模块

#指尖人生#第四篇 模块与包

Python——常用模块

Python之常用模块re模块与logging模块和包

python正则--re模块常用方法

python-re模块

(c)2006-2024 SYSTEM All Rights Reserved IT常识