在处理字符串时,经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是用于描述这些规则的工具。
在Python中使用正则表达式只需要导入一个re包就好了,下面将介绍一下正则表达式的一些主要符号与使用方法
.:注意,我前面写了一个点,点的意思是表示任意的内容,如1,2,3,a,b,!,@等等等等
a.:表示在a的后面匹配任意的内容,ab,a1,a2,ad这些都是符合的
*:表示前面的一个内容出现0次到多次
a.*:符合的有a,a1,ab,aaaa,a1111,aaabbb等等
+:表示前面的一个内容出现一次到多次
a.+:符合的有aa,ab,a1,ac等,它与*的区别就在于+至少要有一次
?:表示前面的一个内容出现0次到1次
a.?: 符合的有a,a1,a2 等
^:表示以什么开头
$:表示以什么结尾
{n,m}:表示内容重复n次
\d\d\d 可以写成\d{3}
{n,m}表示最少重复n次,最多重复m次
下面将进行代码演示
pattern=re.compile('(\d+)(\w+)')
content='123helloWorld'
# match匹配
result=re.match(pattern,content)
if result:
print(result)#返回的是一个匹配的对象
print(result.group(0))#返回的是符合要求的全部内容
print(result.group(1))
print(result.group(2))
else:
print('不符合')
这是一个简单的正则表达式使用代码,compile的意思是编译,代码的目的是从‘123helloWorld’中找出第一个符号为整数并且整数至少有一个的一串字符,这样就会找出123,同理后面的helloWorld是被第二个括号里的(\w+)找出的
输出的结果为
<_sre.SRE_Match object; span=(0, 13), match='123helloWorld'>
123helloWorld
123
helloWorld
# match匹配的是内容的开始部分,作用等同于startswith
result=re.match(pattern,'love myself')
print(result)
像这样的代码最后输出的就是None,因为开头没有数字,所以这串字符与正则表达式不匹配。
正则表达式分为贪婪模式与非贪婪模式,默认是贪婪模式,意思就是尽量找到所有的符合要求的内容,非贪婪模式就是找到第一个符合要求的就不找了。
.*称之为贪婪模式
content='aabbababa11b222'
pattern=re.compile('(a.*b)')
result=pattern.match(content)
print(result)
这段代码最后会找出第一个a到最后一个b之间的字符串
*和+同为贪婪模式,但*是至少0次,+是至少1次
.*?称之为非贪婪模式
pattern=re.compile('(a.*?b)')
result=pattern.match(content)
print(result)
这段代码会找出第一个a到第一个b之间的字符串
正则表达式常用的方法有search,findall,sub
search是查找的意思,找到字符串当中第一个符合正则的内容。
findall会找到所有符合的内容。
sub 替换子串(字符串的一部分)