python 正则模块re
要使用python3中的RE则必须引入 re模块
import re
re模块的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。
re模块的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
带括号的正则模板
带括号的正则模板,此为匹配内容捕获。
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
findall()方法
匹配所有,区别于match的从头开始匹配 ,findall()可以从任何地方匹配
text3="11/27/2012 11/02/2019"
match3_res1=datepat2.findall(text3)
print(match3_res1)
结果:[('11', '27', '2012'), ('11', '02', '2019')]