跟着BU科研通,学习路上更轻松~

一、正则表达式到底是什么东西?

python 如何表达带通配符的字符串 python replace 通配符_正则表达式

又称规则表达式。(Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,「正则表达式就是记录文本规则的代码」

很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。

和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串

python 如何表达带通配符的字符串 python replace 通配符_正则表达式_02

二、元字符

正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

如\b表示单词的分界,如\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等;\w匹配字母或数字或下划线或汉字等

下面来看看更多的例子:

1)\ba\w*\b  匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)。

2)\d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。

3) \b\w{6}\b 匹配刚好6个字符的单词。

4)

1text="JGod is a handsome boy ,but he is a ider"
2print re.findall(r'\w*o\w*',text)  #查找有o的单词
3#输出结果为:['JGod', 'handsome', 'boy']

python 如何表达带通配符的字符串 python replace 通配符_正则表达式_02

三、关于表达式中 \1 的用法

表示取得对第几个()的引用,例如:

1) (\d)\1 匹配连个连续的数字字符,如33, 44, 111

2) (\d)(a)\1匹配第一个是数字,第二个是a,第三个是和第一个相同的数字,如2a2

3) \(d)(a)\2 匹配第一个是数字,第二个是a,第三是和第二个相同的,如8aa, 4aa

python 如何表达带通配符的字符串 python replace 通配符_正则表达式_02

四、Python用法

1.re.compile

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象

2.findall

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

1import re
2pattern = re.compile(r'\d+')   # 查找数字
3result1 = pattern.findall('runoob 123 google 456')
4# ['123', '456']
5result2 = pattern.findall('run88oob123google456', 0, 10)
6# ['88', '12']

3.re.finditer

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

1import re
2it = re.finditer(r"\d+","12a32bc43jf3") 
3for match in it: 
4    print (match.group(), end=" ")
5# 输出 12 32 43 3

其中:

group()同group (0)就是匹配正则表达式整体结果

group(1)列出第一个括号匹配部分, group(2)列出第二个括号匹配部分, group(3)列出第三个括号匹配部分。

这期内容就到这啦,下次说说具体的应用~

Hello BU learner
欢迎关注我,一起学习,一起进步!
跟着BU科研通,学习路上更轻松。