1,python 正则模块re
要使用python3中的RE则必须引入 re模块
import re
2,match函数
result = re.match('^[A-Z]{1}[a-z]+', s)
match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
匹配到了,则result 保存匹配到的结果
如下代码:
import re
def format_name(s):
result = re.match('^[A-Z]{1}[a-z]+', s)
if result:
st = s
else:
st = s.capitalize()
return st
print(list(map(format_name, ['adam', 'LISA', 'barT'])))
结果: ['Adam', 'Lisa', 'Bart']
正则表达式: ^[A-Z]{1}[a-z]*。匹配的是大写字母开头的字母
str的capitalize函数
capitalize() 返回一个字符串,首字母为大写,其他字母为小写
使用形式:str.capitalize()
注意,capitalize()返回的是str的一个副本,这个副本的特点是首字母大写,其余字母小写,并不改变str。
3,search 函数
模式编译后的对象的search函数
pattern.search(string, pos=0, endpos, *, pattern=None)
匹配字符串,默认从字符串的开头开始匹配,也可以通过pos和endpos来指定字符串的匹配位置(match默认从字符串开头开始匹配,pos=0)。找到match对象,通过group返回结果,未匹配返回None。多个匹配,也只返回第一个匹配的对象。
p=re.compile(r'\d+\s?\w*')
#不指定匹配区间
ss="kkkssss132ss"
aa = p.search(ss)
if aa:
print ('匹配的内容是:', aa.group())
else:
print ("正则表达式没有匹配到内容")
结果:
匹配的内容是: 132ss
指定字符串开始结束匹配坐标
bb = p.search('98hsgdhh2345kjh',4,10)
if bb:
print ('匹配的内容是:', bb.group())
else:
print ("正则表达式没有匹配到内容")
结果:
匹配的内容是: 23
返回第一次匹配到的对象
ss="kkkssss132ss897"
aa = p.search(ss)
if aa:
print ('匹配的内容是:', aa.group())
else:
print ("正则表达式没有匹配到内容")
结果:
匹配的内容是: 132
re.search函数
re. search(pattern, string, flags=0) 跟pattern的search相比,不可指定pos和endpos。从字符串开头开始匹配,一旦找到第一个匹配的就返回。
4,compile函数
编译模板成为模板对象。编译后的模板对象可多次使用去匹配模板。
import re
text1="11/27/2012"
text2="Nov 27,2012"
datepat1=re.compile(r"\d+/\d+/\d+")
match_res1=datepat1.match(text1)
print(match_res1)
match_res2=datepat1.match(text2)
print(match_res2)
结果:
<re.Match object; span=(0, 10), match='11/27/2012'>
None
5,带括号的正则模板
带括号的正则模板,此为匹配内容捕获。
datepat2=re.compile(r"(\d+)/(\d+)/(\d+)")
match2_res1=datepat2.match(text1)
print(match2_res1)
match2_res2=datepat2.match(text2)
print(match2_res2)
结果:
<re.Match object; span=(0, 10), match='11/27/2012'>
None
要是查看捕获的分组,使用group及groups方法
print("_________group_________")
print(match2_res1.group())
for index,matched_text in enumerate(match2_res1.group()):
print("group index:",index)
print(matched_text)
print("_________groups_________")
print(match2_res1.groups())
for index,matched_text in enumerate(match2_res1.groups()):
print("groups index:",index)
print(matched_text)
_________group_________
11/27/2012
group index: 0
1
group index: 1
1
group index: 2
/
group index: 3
2
group index: 4
7
group index: 5
/
group index: 6
2
group index: 7
0
group index: 8
1
group index: 9
2
_________groups_________
('11', '27', '2012')
groups index: 0
11
groups index: 1
27
groups index: 2
2012
6,findall()函数
匹配所有,区别于match的从头开始匹配 ,findall()可以从任何地方匹配
text3="11/27/2012 11/02/2019"
match3_res1=datepat2.findall(text3)
print(match3_res1)
结果:[('11', '27', '2012'), ('11', '02', '2019')]