《python从入门到项目实践》第七章 字符串和正则表达式

目录

字符串长度

 截取字符串

分割字符串

字符串检索

大小写转换

 去除空格与特殊字符

格式化字符串

正则表达式操作

match()从开始搜索

search()不仅在起始位置开始搜索

findall() 

替换字符串  sub()

正则分割字符串  split()


字符串长度

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"']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值