最近花时间学习了些简单的正则知识,我将了解到的知识总结在本文中,希望对大家有所帮助
什么是正则表达式:正则表达式可以判断字符串是否符合特定的要求,我们可以通过正则表达式来从字符串中获取我们想得到的特定的部分
正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,下面我给出一些元字符的表达的含义:
\d | 表示任意的一位数字 |
\w | 表示任意的字母和数字 |
\s | 表示空格 |
. | 表示任意的内容 可以是字母也可以是数字,特殊字符等 |
* | 表示内容出现0次到多次 |
+ | 表示内容出现1次到多次 |
? | 表示内容出现0次到1次 |
^ | 表示以xxxx开头 |
$ | 表示以xxxx结尾 |
{n,m} | 表示内容最少重复n次最多重复m次 |
.* \ .+ | 贪婪模式,正则表达式默认为贪婪模式,尽量找到所有符合要求的内容 |
.* | 非贪婪模式,找到第一个符合要求的内容 |
元字符还有很多,我就不一一列举了。
在Python中使用正则表达式之前应先引入re模块:
import re
下面列举几个正则表达式常用的函数:
compile()函数和match()函数:
import re pattern = re.compile('(\d+)(\w+)') content = '123helloWorld' result = re.match(pattern,content) if result: #返回的是一个匹配的对象 print(result) #返回符合要求的全部内容 print(result.group(0)) print(result.group(1))
运行结果为:
<_sre.SRE_Match object; span=(0, 13), match='123helloworld'> 123helloworld 123 helloworld
这里为大家解释一下compile(),match(),和group()
compile是编译的意思,compile 函数用于编译正则表达式,生成一个正则表达式对象,供其他函数使用。()里面写正则表达式的内容。
match是匹配的意思,match函数从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
匹配成功re.match方法返回一个匹配的对象,否则返回None。我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
group:组,正则表达式中每一个()就是一个group组
re.search()函数:扫描整个字符串并返回第一个成功的匹配
pattern = re.compile(r'you') result = pattern.search('I love you,I miss you,I hate you') print(result) pattern = re.compile(r'I') result = pattern.search('I love you') print(result)
结果为:
<_sre.SRE_Match object; span=(7, 10), match='you'> <_sre.SRE_Match object; span=(0, 1), match='I'>
search函数找到字符串当中第一个符合正则的内容,注意: 只找到第一个 解释一下 ‘r’:raw string ,r表示字符串为非转义的原始字符串,让编译器忽略反斜杠,也就是忽略转义字符
findall()函数:
content = '12345,上山打老虎,老虎没打着,打只小松鼠,55555' pattern = re.compile(r'\d{5}') result = pattern.findall(content) print(result)
结果为:
['12345', '55555']
findall函数在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
re.sub()函数:
content = '杨过对战金轮法王,郭靖观战' key_word = [(r'杨\s*过','吕布'), (r'金轮法王','服部半藏'), (r'郭靖','东方不败')] for pattern,replace in key_word: pattern = re.compile(pattern) content = pattern.sub(replace,content) print(content)
结果为:
吕布对战金轮法王,郭靖观战 吕布对战服部半藏,郭靖观战 吕布对战服部半藏,东方不败观战
sub用于替换字符串中的匹配项
以上就是正则表达式的一些基础知识,本文只是入门教程,让你学习完后能使用基本的表达式进行匹配,由于本人也是刚学正则,文章里有错误的地方欢迎大家指正。