Python——字符串

申明:本文是对学习Python字符串时的总结,后面会继续扩充。

1. 字符串的分片与索引

str = 'My name is Lianhua.'

print str[0]
>>>M
print str[4]
>>>a
print str[0:4]
>>>My n    #从下标0到下标3,不包含下标4
print str[-1]
>>>.
print str[-4]
>>>n
print str[-4:-1]
>>>nhu    # 从下标-4到下标-2,不包含下标-1
print str[3:9]
>>>name i     # 从下标3到下标8,不包含下标9
print str[:5]
>>>My na     #从下标0到下标4,不包含下标5
print str[5:]
>>>me is Lianhua.   # 从下标5开始,到最后一个字符

2. 字符串的查找

(1)查找字符串 —— find
在一串字符串里查找某个子字符串,会返回子字符串所在位置的索引,若找不到,则返回-1

title = 'python can be easy to pick up and powerful language'
print title.find('pick up')   #查找pick up位置索引,字符串下标从0开始(从左往右)
>>>22
print title.find('33333333')   #查找33333333,找不到,返回-1
>>>-1
print title.find('t', 2)    #从下标为2的字符开始查找字母t的位置索引
>>>4

(2)查找字符串 —— index
index查找某子字符串第一次出现的位置,若找不到,抛出异常,而不像find那样返回-1

title = 'python can be easy to pick up and powerful language'
print title.find('33333333')   #查找33333333,找不到,返回-1
>>>Traceback
   Value Error: substring not find

(3)查找字符串的头&尾 —— startswith & endswith

filename = 'test.py'
print filename.startswith('test')
>>>True
print filename.endswith('py')
>>>True

3. 字符串的更新

str = 'Hello World!'
print str[6:11] + 'Runoob!'
>>>Hello Runoob

4. 字符串的替换

(1)替换字符串——索引

str = 'I love Njupt'
str[2] = 'NanJing'
print str
>>>I love NanJing

(2)替换字符串 —— replace

str = 'I love NJUPT'
print str.replace('NJUPT', 'NanJing')
>>>I love NanJing
phone = '136-7517-7192'
str = phone.replace(phone[4:8],'*'*4)
print str
>>>136-****-7192

(3)替换字符串 —— 正则表达式
re.sub(pattern, repl, string, count=0, flags=0)
参数:
// pattern : 正则中的模式字符串;即:要从原字符串中找到的子字符串。
// repl : 替换的字符串,也可为一个函数;即:要将第一个参数表示的内容替换为此参数的内容。
// string : 要被查找替换的原始字符串。
// count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

import re
phone = "2004-959-559 // 这是一个国外电话号码" 
# 删除字符串中的 Python注释 
num = re.sub(r'//.*$', "", phone)  # 将变量phone中//符号及其后面的多个任意字符号变为空白(第二个参数" ")
print "电话号码是", num
>>>2004-959-559

# 删除非数字(-)的字符串 
num = re.sub(r'\D', "", phone)  #\D表示非数字字符,即:将phone变量中的所有非数字字符替换为空白(相当于删除)
print "电话号码是", num
>>>2004959559

5. 字符串的连接与合并

(1)相加 —— +

str1 = 'Hello'
str2 = 'World'
new_str = str1 + str2
print new_str
>>>HelloWorld

(2)合并 —— join

url = ['www','Python','org']
print '.'.join(url)   #用.把url里的字符合并起来
>>>www.Python.org

6. 字符串的切片和相乘

(1)相乘 —— *

line = '@' * 20
print line
>>@@@@@@@@@@@@@@@@@@@@

(2)切片

str = 'Monday is a busy day'   #从头开始是0 1 2 3...  从最后一个开始是-1 -2 -3...
print str[0:8]    #打印第1到第8个字符
>>>Monday i
print str[-5:]    #打印从倒数第5个字符到最后一个字符
>>>y day
print str[::]     #复制字符串
>>>Monday is a busy day

7. 字符串的分割

(1)普通分割 —— split

phone = '400-800-800-1234
print phone.split('-')
>>>['400','800','800','1234']

(2)复杂的分割 —— re.split

line = 'hello world;  python, I ,like,   it'
import re    #re:正则表达式的模块
print re.split(r'[;,s]\s*', line)  # [;,s]表示遇到;遇到,遇到空格(用s表示)的情况
                                   # \s表示匹配任意空白字符,*表示0到多个,即:匹配0到多个任意空白字符
>>>['hello world', 'python', 'I', 'like' 'it']

*ps:关于Python中的正则表达式(re模块),后面有空会整理,到时候在此处放链接

8. 字符串的比较 —— cmp

cmp(x,y):如果x< y,返回-1; 如果x>y,返回1。

a = 2
b = 5
print cmp(a,b)
>>>-1
>print cmp(b,a)
>>>1

9. 字符串的翻转 —— [::-1]

a = 'abcd'
b = a[::-1]  #调转a中的字符顺序实现字符串的翻转,即:创造一个与原字符串顺序相反的字符串
print b
>>>dcba

10. 字符串转换字母大小写 —— upper(), lower()

字符串中字母的大小写转换用upper( )和lower( )实现

str.upper() # str中的字母全部转换为大写
str.lower() # str中的字母全部转换为小写
str.swapcase() # str中的所有字母大小写互换
str.capitalize() # str中的首字母大写
str.istitle() # str是否是首字母大写的
str.isupper() # str中的字母是否是大写
str.islower() #str中的字母是否全是小写

11. 字符串的其他处理

(1)去除字符串中的空格 —— strip
有时候对某文本进行处理时,需要清除每一行两侧的空格或者Tab键或者换行符

line = '  Congratulations!  You are successful.   '
print line.strip()
>>>Congratulations!  You are successful.   #去除了行头和行尾的空格

注意:这里只能消除行两端的空格,若要消除字符串中间的空格,可用replace实现

(2)复杂的文本处理 —— 删除&替换
这里涉及到两个Python的方法,如下:

方法1:str.translate方法

b = a.translate(strtable,delete)  #某字符串中某些字符被删除,某些字符被修改
参数:
    a:表示一个需要待修改的源字符串
    strtable:表示一个翻译表(相当于一个模板,字符串接下来要做的修改就依照这个模板的功能进行相应更改)
    delete:表示的字符是接下来需要在源字符串a中被删除的字符,删除后剩下的字符再经过翻译表strtable进行修改
    b:表示字符串a在经过delete的删除和strtable的修改后的新字符串

翻译表是什么呢?翻译表是通过maketrans方法转换而来,其原型如下:

方法2:string.maketrans方法

string.maketrans(instr,outstr)  #instr中的字符要被outstr中的字符替换,instr和outstr的长度必须相等

举栗:

instr = 'Njupt'
outstr = 'NanJing'
table = string.maketrans(instr,outstr)  # 翻译表:Njupt要被替换为NanJing

A = 'I also love Njupt.'
B = A.translate(table,also) # also被删,Njupt倍替换为NanJing
print B

>>>I love NanJing.

12. 字符串的格式化——%

格式化字符串时,Python和C语言一致,均采用%来实现。
使用一个字符串作为模板,模板中有占位符(格式符),这些占位符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple(元组)将多个值传递给模板,每个值对应一个格式符,在模板和元组之间,有一个%号分隔,它代表了格式化操作。
举个栗子:

>>>print "I'm %s, and I'm %d years old." % ('Lianhua',26)
I'm Lianhua, and I'm 26 years old.

前面的 I'm %s, and I'm %d years old. 是模板
后面的 ('Lianhua',26) 是赋值的元组,模板与元组之间用%分隔,代表格式化操作
第一个%s表示为元组中附的第一个值 'Lianhua'预留位置
第二个%d表示为元组中附的第二个值 '26'预留位置

在字符串内部,用%s表示字符串的替换,%d表示整数替换;有几个%?占位符,后面就跟几个变量或值,顺序要一一对应。
常见的占位符有:

%d:十进制整数
%f:浮点数
%x:十六进制整数
%s:字符串
%%:字符%

举栗:

print 'growth rate: %d %%' % 7
>>>growth rate: 7 %

如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串
举栗:

print 'My name is %s. My age is %s.' % ('Lianhua',26) 
>>>My name is Lianhua. My age is 26

%格式符还有一个功能:指定小数的小数点位数
举栗:

print '%.2f' % 3.141592653   #%后面的.表示小数点,f前的2表示显示小数点后2位
>>>3.14

13. 字符串的格式化——str.format()

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。

str = "{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
print str
>>>hello world

str = "{0} {1}".format("hello", "world")  # 设置指定位置
print str
>>>hello world

str = "{1} {0} {1}".format("hello", "world")  # 设置指定位置
print str
>>>world hello world
str = "网站名:{name}, 地址:{url}".format(name="百度", url="www.baidu.com")
print str
>>>网址名:百度,地址:www.baidu.com

# 通过字典设置参数
site = {"name": "百度", "url": "www.baidu.com"}
print "网站名:{name}, 地址 {url}".format(**site)
>>>网址名:百度,地址:www.baidu.com

# 通过列表索引设置参数
my_list = ['百度', 'www.baidu.com']

print "网站名:{0[0]}, 地址 {0[1]}".format(my_list)  
>>>网址名:百度,地址:www.baidu.com

print "网站:{0}".format(my_list)  
>>>网址:百度,www.baidu.com

14. 字符串的匹配

(1)匹配字符串 —— re.match
从整个字符串的起始位置开始匹配,若匹配成功,返回匹配到的对象;若不是在起始位置匹配成功,返回none

re.match(pattern, string, flags=0)

参数:
// pattern指匹配的正则表达式(相当于你要匹配的目标子字符串)
// string指待匹配的字符串(相当于等待你来搜寻匹配的那个源字符串)
// flag指标志位,用于控制正则表达式的匹配方式(如:是否区分大小写,多行匹配等等)

(2)匹配字符串 —— re.search
扫描整个字符串,并返回第一个匹配成功的对象

import re
print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())         # 不在起始位置匹配

ps: 此处待后续整理正则表达式再详说

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值