正则表达式是用来匹配和查找字符串的,python正则表达式需先引入re模块,以r引导,接下来介绍其用法。
在以下的学习中,我们要先认识search是re中的函数,函数返回的匹配对象中,span()表示的返回对象的位置。
1.字符“\d”匹配0-9之间一个数值
import re
reg=r"\d"
m=re.search(reg,"abc123abc")
print(m)
结果找到了第一个数值“1”:
<_sre.SRE_Match object;span=(3,4),match='1'>
2.字符“+”重复前面一个匹配字符一次或者多次
import re
reg=r"b\d+"
m=re.search(reg,"a12b123c")
print(m)
结果找到了“b123”:
<_sre.SRE_Match object;span=(3,7),match='b123'>
注意!:r"b\d+"第一个字符要匹配“b”,后面是连续的多个数字,因此是“b123”,假如字符串为a12bbb12c,则匹配“b12”,字符串为a12bbc,则找不到匹配对象。
3.字符“*”重复前一个匹配字符零次或多次
import re
reg=r"ab+"
m=re.search(reg,"acabc")
print(m)
reg=r"ab*"
m=re.search(reg,"acabc")
print(m)
结果:
<_sre.SRE_Match object;span=(2,4),match='ab'>
<_sre.SRE_Match object;span=(0,1),match='a'>
+与**的区别:
“ab+”要求“b“重复一次以上
“ab*”表示“b”可以重复零次
4.字符“?”重复前一个匹配字符零次或一次
import re
reg=r"ab?"
m=re.search(reg,"abbcabc")
print(m)
结果:
<_sre.SRE_Match object;span=(0,2),match='ab'>
5.字符“.”代表任何一个字符,但是没有特别声明时不代表字符“\n”
import re
s="xaxby"
m=re.search(r"a.b",s)
print(m)
结果“.”代表了字符“x”:
<_sre.SRE_Match object;span=(1,4),match='axb'>
6.“|”代表把左右分成两部分(结果可以匹配左边或者是右边的字符)
import re
s="xaabababy"
m=re.search(r"ab|ba",s)
print(m)
结果匹配“ab”或“ba”都可以:
<_sre.SRE_Match object;span=(2,4),match='ab'>
7.特殊字符使用反斜线“\”引导,例如"\r","\n","\t","\"分别表示回车,换行,制表符号与反斜线本身
import re
reg=r"a\nb"
m=re.search(reg,"ca\nbcabc")
print(m)
结果:
<_sre.SRE_Match object;span=(1,4),match='a\nb'>
8.字符"\b"表示单词结尾,单词结尾包括各种空白字符或者字符串结尾
import re
reg=r"car\b"
m=re.search(reg,"The car is black")
print(m)
结果匹配“car”,因为其后面是空格:
<_sre.SRE_Match object;span=(4,7),match='car'>
9.“[]”中的字符表示任选一个,如果字符是ASC||中连续的一组,那么可使用“-”连接,如[0-9]表示0-9其中一个数字,[A-Z]表示A-Z其中一个大写字符,[0-9A-z]表示0-9其中的一个数字或者是A-Z其中一个大写字符
import re
reg=r"x[0-9]y"
m=re.search(reg,"xyx2y")
print(m)
结果:
<_sre.SRE_Match object;span=(2,5),match='x2y'>
10.“^”出现在[]的第一个字符位置,就代表取反
import re
reg=r"x[^ab0-9]y"
m=re.search(reg,"xayx2yxcy")
print(m)
结果:
<_sre.SRE_Match object;span=(6,9),match='xcy'>
11."\s"匹配任何空白字符,等价“[\r\n\x20\t\f\v]”
import re
s="la ba\tbxy"
m=re.search(r"a\sb",s)
print(m)
结果:
<_sre.SRE_Match object;span=(1,4),match='a b'>
12."\w"匹配包括下划线内的单词字符,等价于"[a-zA-Z0-9]"
import re
reg=r"\w+"
m=re.search(reg,"Python is easy")
print(m)
结果:
<_sre.SRE_Match object;span=(0,6),match='Python'>
13."^"匹配字符串的开头位置
import re
reg=r"^ab"
m=re.search(reg,"cabcab")
print(m)
结果:没有匹配到任何字符,因为"cabcab"虽然有"ab",但不是以"ab"开头
None
14.“$”字符匹配字符串结尾位置
import re
reg=r"ab$"
m=re.search(reg,"abcab")
print(m)
结果匹配最后一个“ab”,而不是第一个“ab"(从位置判断):
<_sre.SRE_Match object;span=(3,5),match='ab'>
15.使用括号(…)可以把(…)看成一个整体,经常与"+"、"*"、"?"等符号连续使用,对(…)部分进行重复
import re
reg=r"(ab)+"
m=re.search(reg,"ababcab")
print(m)
结果匹配"abab",“+”对“ab”进行了重复:
<_sre.SRE_Match object;span=(0,4),match='abab'>