跟着BU科研通,学习路上更轻松~
一、正则表达式到底是什么东西?
又称规则表达式。(Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,「正则表达式就是记录文本规则的代码」。
很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。
和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串
二、元字符
正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。
所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
「如\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']
三、关于表达式中 \1 的用法
表示取得对第几个()的引用,例如:
1) (\d)\1 匹配连个连续的数字字符,如33, 44, 111
2) (\d)(a)\1匹配第一个是数字,第二个是a,第三个是和第一个相同的数字,如2a2
3) \(d)(a)\2 匹配第一个是数字,第二个是a,第三是和第二个相同的,如8aa, 4aa
四、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科研通,学习路上更轻松。