目录
字符串长度
str1 = '人生苦短,我用Python!' # 定义字符串
length = len(str1) # 计算字符串的长度
print(length)
str1 = '人生苦短,我用Python!' # 定义字符串
length = len(str1.encode()) #计算UTF-8编码的字符串的长度
print(length)
str1 = '人生苦短,我用Python!' # 定义字符串
length = len(str1.encode('gbk')) #计算GBK编码的字符串的长度
print(length)
14
28
21
截取字符串
string[start : end : step]
包括start 不包括end
分割字符串
str.split(sep , maxsplit)
str :表示要进行分割的字符串。
sep : 指定分隔符,默认为None
maxsplit : 指定分割次数,默认-1,分割次数没有限制
(用谁分割谁就没了)
str1 = '明 日 学 院 官 网 >>> www.mingrisoft.com'
print('原字符串:',str1)
list1 = str1.split() # 采用默认分隔符进行分割
list2 = str1.split('>>>') # 采用多个字符进行分割
list3 = str1.split('.') # 采用.号进行分割
list4 = str1.split(' ',4) # 采用空格进行分割,并且只分割前4个
print(str(list1) + '\n' + str(list2) + '\n' + str(list3) + '\n' + str(list4))
list5 = str1.split('>') # 采用>进行分割
print(list5)
原字符串: 明 日 学 院 官 网 >>> www.mingrisoft.com
['明', '日', '学', '院', '官', '网', '>>>', 'www.mingrisoft.com']
['明 日 学 院 官 网 ', ' www.mingrisoft.com']
['明 日 学 院 官 网 >>> www', 'mingrisoft', 'com']
['明', '日', '学', '院', '官 网 >>> www.mingrisoft.com']
['明 日 学 院 官 网 ', '', '', ' www.mingrisoft.com']
最后的 list5 包含了两个空元素
字符串检索
1.count()方法
str.count(sub[, start[,end]])
str : 原字符串
sub : 要检索的字符串
返回个数
2.find()方法 //rfind():从右边查找
str.find(sub[, start[,end]])
检索字符串不存在,返回-1,;若是存在,则返回首次出现的索引。
3.index()方法 // rindex()
str.index(sub[, start[,end]])
与find()类似,不过不存在检索字符串时,抛出异常。
4.startswith()方法
str.startswitch(prefix[, start[,end]])
字符串str是否以指定字符串prefix开头,是,返回True
5.endswith()方法
str.endswitch(prefix[, start[,end]])
字符串str是否以指定字符串prefix结尾,是,返回True
大小写转换
lower() 与 upper()
str1 = 'WWW.Mingrisoft.com'
print('原字符串:',str1)
print('新字符串:',str1.lower()) # 转换为全部小写输出
str1 = 'WWW.Mingrisoft.com'
print('原字符串:',str1)
print('新字符串:',str1.upper()) # 转换为全部大写输出
原字符串: WWW.Mingrisoft.com
新字符串: www.mingrisoft.com
原字符串: WWW.Mingrisoft.com
新字符串: WWW.MINGRISOFT.COM
去除空格与特殊字符
\t \r \n这类为特殊字符
strip()方法
str.strip([chars])
str1 = ' http://www.mingrisoft.com \t\n\r'
print('原字符串str1:' + str1 + '。')
print('字符串:' + str1.strip() + '。') # 去除字符串首尾的空格和特殊字符
str2 = '@明日科技.@.'
print('原字符串str2:' + str2 + '。')
print('字符串:' + str2.strip('@.') + '。') # 去除字符串首尾的@或者.
原字符串str1: http://www.mingrisoft.com
。
字符串:http://www.mingrisoft.com。
原字符串str2:@明日科技.@.。
字符串:明日科技。
lstrip() 与 rstrip() 分别指去掉左侧、右侧空格和特殊字符
格式化字符串
格式化字符串是指先置顶一个模板,模板中预留空位,根据需要填上内容。
空位需要通过指定的符号标记(占位符),而这些符号还不会显示出来。
1.使用%操作符
'%[-][+][0][m][.n]格式化字符'%exp
template = '编号:%09d\t公司名称: %s \t官网: http://www.%s.com' # 定义模板
context1 = (7,'百度','baidu') # 定义要转换的内容1
context2 = (8,'明日学院','mingrisoft') # 定义要转换的内容2
print(template%context1) # 格式化输出
print(template%context2) # 格式化输出
编号:000000007 公司名称: 百度 官网: http://www.baidu.com
编号:000000008 公司名称: 明日学院 官网: http://www.mingrisoft.com
2.使用format()方法
str.format(args)
str 用于指定字符串的显示样式,即模板;
args 用于指定要转换的项,有多项,用逗号分隔
创建模板时,需要使用“{ }”和“:”来指定占位符,基本语法如下:
{[index][:[[fill]align][sign][#][width][.precision][type]]}
template = '编号:{:0>9s}\t公司名称: {:s} \t官网: http://www.{:s}.com' # 定义模板
context1 = template.format('7','百度','baidu') # 转换内容1
context2 = template.format('8','明日学院','mingrisoft') # 转换内容2
print(context1) # 输出格式化后的字符串
print(context2)
编号:000000007 公司名称: 百度 官网: http://www.baidu.com
编号:000000008 公司名称: 明日学院 官网: http://www.mingrisoft.com
正则表达式操作
使用re模块提供的match()、search()、findall()等方法进行字符串的匹配
match()从开始搜索
re.match(pattern, string, [flags])
pattern 表示模式字符串
string 表示要匹配的字符串
flags,表示标志位,可选参数,用于控制匹配方式
import re
pattern = r'mr_\w+' # 模式字符串
string = 'MR_SHOP mr_shop' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match) # 输出匹配结果
string = '项目名称MR_SHOP mr_shop'
match = re.match(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match) # 输出匹配结果
<re.Match object; span=(0, 7), match='MR_SHOP'>
None
re.I 表示不区分大小写进行匹配
match 是一个Match对象
import re
pattern = r'mr_\w+' # 模式字符串
string = 'MR_SHOP mr_shop' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不区分大小写
print('匹配值的起始位置:',match.start())
print('匹配值的结束位置:',match.end())
print('匹配位置的元组:',match.span())
print('要匹配的字符串:',match.string)
print('匹配数据:',match.group())
匹配值的起始位置: 0
匹配值的结束位置: 7
匹配位置的元组: (0, 7)
要匹配的字符串: MR_SHOP mr_shop
匹配数据: MR_SHOP
search()不仅在起始位置开始搜索
re.search(pattern, string, [flags])
import re
pattern = r'mr_\w+' # 模式字符串
string = 'MR_SHOP mr_shop' # 要匹配的字符串
match = re.search(pattern,string,re.I) # 搜索字符串,不区分大小写
print(match) # 输出匹配结果
string = '项目名称MR_SHOP mr_shop'
match = re.search(pattern,string,re.I) # 搜索字符串,不区分大小写
print(match) # 输出匹配结果
<re.Match object; span=(0, 7), match='MR_SHOP'>
<re.Match object; span=(4, 11), match='MR_SHOP'>
findall()
re.findall(pattern, string, [flags])
import re
pattern = r'mr_\w+' # 模式字符串
string = 'MR_SHOP mr_shop' # 要匹配的字符串
match = re.findall(pattern,string,re.I) # 搜索字符串,不区分大小写
print(match) # 输出匹配结果
string = '项目名称MR_SHOP mr_shop'
match = re.findall(pattern,string) # 搜索字符串,区分大小写
print(match) # 输出匹配结果
['MR_SHOP', 'mr_shop']
['mr_shop']
import re
pattern = r'[1-9]{1,3}(\.[0-9]{1,3}){3}' # 模式字符串
str1 = '127.0.0.1 192.168.1.66' # 要配置的字符串
match = re.findall(pattern,str1) # 进行模式匹配
print(match)
['.1', '.66']
import re
pattern = r'([1-9]{1,3}(\.[0-9]{1,3}){3})' # 模式字符串
str1 = '127.0.0.1 192.168.1.66' # 要配置的字符串
match = re.findall(pattern,str1) # 进行模式匹配
for item in match:
print(item[0])
127.0.0.1
192.168.1.66
match = <class 'list'>: [('127.0.0.1', '.1'), ('192.168.1.66', '.66')]
上面的两个程序是分组的对比
替换字符串 sub()
re.sub(pattern, repl, string, count, flags)
repl 表示替换的字符串
import re
pattern = r'1[34578]\d{9}' # 定义要替换的模式字符串
string = '中奖号码为:84978981 联系电话为:13611111111'
result = re.sub(pattern,'1XXXXXXXXXX',string) # 替换字符串
print(result)
中奖号码为:84978981 联系电话为:1XXXXXXXXXX
正则分割字符串 split()
re.split(pattern, string, [maxsplit], [flags])
import re
pattern = r'[?|&]' # 定义分割符
url = 'http://www.mingrisoft.com/login.jsp?username="mr"&pwd="mrsoft"'
result = re.split(pattern,url) # 分割字符串
print(result)
['http://www.mingrisoft.com/login.jsp', 'username="mr"', 'pwd="mrsoft"']