字符串匹配和搜索
str.find() , str.endswith() , str.startswith()
这是普通的字符串的匹配方法
text = 'yeah, but no, but yeah, but no, but yeah'
print(text == 'yeah') #False
print(text.startswith('yeah')) #True
print(text.endswith('no')) #False
print(text.find('no')) #10
使用正则 + re.match() / re.findall()
例:想匹配数字格式的日期字符串比如 11/27/2012
text1 = '11/27/2012'
text2 = 'Nov 27, 2012'
import re
if re.match(r'\d+/\d+/\d+', text1):
print('yes')
else:
print('no') #yes
if re.match(r'\d+/\d+/\d+', text2):
print('yes')
else:
print('no') #no
当然,如果正则要多次使用的话,也可以进行预编绎
#先进行预编绎
datepat = re.compile(r'\d+/\d+/\d+')
if datepat.match(text1):
print('yes')
else:
print('no') #yes
if datepat.match(text2):
print('yes')
else:
print('no') #no
match() 总是从字符串开始去匹配,如果你想查找字符串任意部分的模式出现位置,使用 findall() 方法去代替。
text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
print(datepat.findall(text)) #['11/27/2012', '3/13/2013']
字符串搜索和替换
使用 str.repalce()
对于简单的字面模式,直接使用 str.repalce() 方法即可,比如:
text = 'yeah, but no, but yeah, but no, but yeah'
print(text.replace('yeah', 'fuck'))
# 'fuck, but no, but fuck, but no, but fuck'
使用 re.sub()
对于复杂的模式,请使用 re 模块中的 sub() 函数进行替换。比如想将 11/27/201 的日期字符串改成 2012-11-27 。示例如
text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
import re
print(re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text))
#'Today is 2012-11-27. PyCon starts 2013-3-13.'
对于更加复杂的模式,就要使用回调函数来代替了
字符串忽略大小写的搜索替换
使用正则并添加 re.IGNORECASE
为了在文本操作时忽略大小写,你需要在使用 re 模块的时候给这些操作提供re.IGNORECASE 标志参数。比如
text = 'UPPER PYTHON, lower python, Mixed Python'
#搜索
print(re.findall('python', text, flags=re.IGNORECASE))
#['PYTHON', 'python', 'Python']
#替换
print(re.sub('python', 'snake', text, flags=re.IGNORECASE))
# 'UPPER snake, lower snake, Mixed snake'