字符串与文本02-字符串匹配和搜索 / 字符串搜索和替换

字符串匹配和搜索


  • 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'

猜你喜欢

转载自blog.csdn.net/xiangchi7/article/details/82377270