码迷,mamicode.com
首页 > 其他好文 > 详细

字符串总结

时间:2020-06-08 23:43:40      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:字典   判断   数字   切割   print   表达式   检查   斜杠   模式   

字符串

  • 定义:
    由一系列字符组成的不可变序列容器,存储的是字符的编码值
    通常包含在单引号(‘ ’),双引号(”“),三引号(‘‘‘ ‘‘‘)
    三引号字符串常用于函数的注释

字符串常用方法

  1. 统计字符串长度
str01 = "人生苦短,我用python!"  
print(len(str01))      # 14
  1. 分割字符串
>>> line = ‘asdf fjdk; afed, fjek,asdf, foo‘
>>> line.split()  # [‘asdf‘, ‘fjdk;‘, ‘afed,‘, ‘fjek,asdf,‘, ‘foo‘]
  • string 对象的 split() 方法默认以空格来分割,结果存在列表中,也可以指定其他字符。
    例如:”,“,”\n“,"\t","a"……
    但是只适应于非常简单的字符串分割情形,它并不允许有多个分隔符或者是分隔符周围不确定的空格。
    当你需要更加灵活的切割字符串的时候, 最好使用 re.split() 方法
>>> import re
>>> line = ‘asdf fjdk; afed, fjek,asdf, foo‘ 
>>> re.split(r‘[;,\s]\s*‘, line)      # [‘asdf‘, ‘fjdk‘, ‘afed‘, ‘fjek‘, ‘asdf‘, ‘foo‘]

当你使用 re.split() 函数时候,需要特别注意的是正则表达式中是否包含一个括号捕获分组。如果使用了捕获分组,那么被匹配的文本也将出现在结果列表中。比如

>>> fields = re.split(r‘(;|,|\s)\s*‘, line)
>>> fields      # [‘asdf‘, ‘ ‘, ‘fjdk‘, ‘;‘, ‘afed‘, ‘,‘, ‘fjek‘, ‘,‘, ‘asdf‘, ‘,‘, ‘foo‘]
  1. 拼接字符串
# 直接+连接两个字符串
str1 = "hello"
Str2 = "world"
print(str1+str2)      # ‘helloworld‘
# 字符.join(可迭代对象)
list1 = [str1,str2]
",".join(list1) # "hello,world"
  1. 字符串开头或结尾匹配
>>> filename = ‘spam.txt‘
>>> filename.endswith(‘.txt‘) 
True
>>> filename.startswith(‘file:‘) 
False
>>> url = ‘http://www.python.org‘ 
>>> url.startswith(‘http:‘)
True

如果想检查多种匹配可能,只需要将所有的匹配项放入到一个元组中去,然后传给startswith()或者endswith()
例如:name.endswith((‘.c‘, ‘.h‘))

  1. 字符串索引和匹配
line = ‘asdf fjdk; afed, fjek,asdf, foo‘
>>> line.find(‘dk‘)           # 判断子字符串在原字符串中的下标,不存在时返回-1
7
>>> line.index(‘d‘)          # 判断子字符串在原字符串中的下标,不存在时报错
2

对于复杂的匹配需要使用正则表达式和 re 模块。

>>> import re
>>> text1 = ‘11/27/2012‘ 
>>> text2 = ‘Nov 27, 2012‘
>>> datepat = re.compile(r‘\d+/\d+/\d+‘)
>>> datepat.match(text1)      
True
# 同re.match(r‘\d+/\d+/\d+‘,test1)

在定义正则式的时候,通常会利用括号去捕获分组。捕获分组可以使得后面的处理更加简单,因为可以分别将每个组的内容提取出来.

>>> datepat = re.compile(r‘(\d+)/(\d+)/(\d+)‘)
>>> m = datepat.match(‘11/27/2012‘)
>>> m.group(0)
‘11/27/2012‘
>>> m.group(1) 
‘11‘
>>> m.group(2)
‘27‘
>>> m.group(3)
‘2012‘
>>> m.groups()
(‘11‘, ‘27‘, ‘2012‘)

match() 总是从字符串开始去匹配,如果你想查找字符串任意部分的模式出现位置,使用 findall()方法去代替。

>>> text = ‘Today is 11/27/2012. PyCon starts 3/13/2013.‘ 
>>> datepat.findall(text)
[‘11/27/2012‘, ‘3/13/2013‘]

findall() 方法会搜索文本并以列表形式返回所有的匹配。如果你想以迭代方式返回匹配,可以使用 finditer()方法来代替

text = ‘Today is 11/27/2012. PyCon starts 3/13/2013.‘
for m in re.finditer(‘11/27/2012‘,test): 
      print(m.groups())      # (‘11‘, ‘27‘, ‘2012‘)     (‘3‘, ‘13‘, ‘2013‘)
  1. 字符串搜索和替换
>>> text = ‘yeah, but no, but yeah, but no, but yeah‘ 
>>> text.replace(‘yeah‘, ‘yep‘)
‘yep, but no, but yep, but no, but yep‘

对于复杂的模式,可以使用 re 模块中的 sub() 函数。假设想将形式为 2012/11/27 的日期字符串改成 2012-11-27

>>> import re
>>> text = ‘Today is 2012/11/27. PyCon starts 2013/3/13.‘ 
>>> re.sub(r‘(\d+)/(\d+)/(\d+)‘, r‘\1-\2-\3‘, text) 
‘Today is 2012-11-27. PyCon starts 2013-3-13.‘

sub() 函数中的第一个参数是被匹配的模式,第二个参数是替换模式。反斜杠数字,比如 \3 指向前面模式的捕获组号.
7. 其他

text.strip()  去掉空格和换行符
text.strip(‘xx‘)  去掉某个字符串
text.lstrip()  去掉左边的空格和换行符
text.rstrip()  去掉右边的空格和换行符
text.count(‘x‘)  查找某个字符在字符串里面出现的次数
text.capitalize()  首字母大写
text.lower()       将所有大写字母改为小写
text.upper()      将所有小写字母改为大写
text.swapcase()      将所有小写字母改为大写,并将所有大写字母改为小写
text.center(n,‘-‘)   把字符串放中间,两边用- 补齐
text.format() 字符串格式化
text.format_map(d)  字符串格式化,传进去的是一个字典


# 判断是否全是字母和数字,并至少有一个字符 
S.isalpha() #是否全是字母,并至少有一个字符 
S.isdigit() #是否全是正整数,并至少有一个字符 
S.isspace() #是否全是空白字符,并至少有一个字符 
S.islower() #S中的字母是否全是小写 
S.isupper() #S中的字母是否便是大写 
S.istitle() #S是否是首字母大写的

字符串总结

标签:字典   判断   数字   切割   print   表达式   检查   斜杠   模式   

原文地址:https://www.cnblogs.com/-666/p/13069314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!