Python3代码示例:字符串操作

发布于:2018-02-08 | 分类:python/vba/cpp


去除字符串前后指定字符

  • str.strip([chars])--去除字符串前后两边的指定字符
  • str.lstrip([chars])--去除字符串前边的指定字符
  • str.rstrip([chars])--去除字符串后边的指定字符
# 参数为None则默认去除空白字符(空格,换行,制表符)
s = ' \t hello world \n'
s.strip()  # 'hello world'
s.lstrip() # 'hello world \n'
s.rstrip() # ' \t hello world'

# 指定字符串参数,表示要删除字符的集合
s = '-----hello world====='
s.strip('-=') # 'hello world'
s.lstrip('-') # 'hello world====='
s.rstrip('=') # '-----hello world'

字符串替换

strip()只能去除字符串两侧的内容,对位于中间位置的任何文本不起作用。对任意位置的字符删除可以借助replace()函数实现。

  • str.replace(old, new[, max])--把旧字符串替换成新字符串,默认全部替换;若指定第三个参数,则替换次数不超过max
str = "hello world";
new_str = str.replace("l", "", 2) # 'heo world'

对于字符串模板的替换,可以在字符串中使用{var}标记需要替换的变量名,然后使用format()方法替换变量内容。

# 顺序变量
'{2}, {1}, {0}'.format(*'abc')
# 'c, b, a'

# 命名变量
str = '{name} has {n} messages.'
str.format(name='Guido', n=37)
# 'Guido has 37 messages.'

字符串开头/结尾内容判断

字符串的startswith()endswith()函数分别可用于对字符串起始/结束文本内容的判断。需要注意的是,当传入元组类型参数时,表示匹配其中任意元素

s = ["hello","python","world"]
res = [s0 for s0 in s if s0.startswith(("h","wo"))]
# res=['hello', 'world']

字符串拼接/拆分

split()join()分别起到拆分和拼接字符串的作用:

# split拆分字符串为列表
s = 'hello python world'
L = s.split(" ")

# join拼接列表元素为字符串
res = "-".join(L) # 'hello-python-world'

如果需要 按行('\r', '\r\n', \n')分隔字符串,则可使用splitlines():

# string.splitlines([keepends])按照行拆分字符串
# 参数keepends默认为False,不包含换行符;如果为True,则保留换行符
str = 'hello\n\npython\rworld\r\n'
res1 = str.splitlines()
# ['hello', '', 'python', 'world']
res2 = str.splitlines(True)
# ['hello\n', '\n', 'python\r', 'world\r\n']

string对象的split()方法只适应于非常简单的字符串分割情形, 无法处理多个分隔符或者是分隔符周围不确定的空格。使用re.split()方法则可以更加灵活地切割字符串:

import re

str = 'asdf fjdk; afed, fjek,asdf, foo'
re.split(r'[;,\s]\s*', line)
# ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

字符串对齐

  • str.ljust(width,[fillchar])--输出width个字符,str左对齐,不足部分用fillchar(默认为空格)填充
  • str.rjust(width,[fillchar])--右对齐
  • str.center(width, [fillchar])--中间对齐
  • str.zfill(width)--类似str.rjust,不足部分填充0
s = "hello world"
print(s.ljust(20, '*'))
print(s.center(20, '*'))
print(s.rjust(20, '*'))

# hello world*********
# ****hello world*****
# *********hello world

s = "123"
print(s.zfill(6))
# 000123

以上方法仅针对字符串的对齐操作,更为通用的方法是函数format(),它可以用来格式化任意对象。 使用<>^后紧跟一个指定的宽度,分别用来表示左对齐、右对齐和中间对齐。若要指定一个非空格的填充字符,将其写到对齐字符之前即可:

# 对齐字符串
x = 'Hello World'
format(x, '<20') # 'Hello World         '
format(x, '=>20s') # '=========Hello World'
format(x, '*^20s') # '****Hello World*****'

# 对齐浮点数
x = 1.2345
format(x, '>10') # '    1.2345'

当格式化多个值时,这些格式代码也可以被用在format()方法中:

'{:>10s} {:>10s}'.format('Hello', 'World')
# '     Hello      World'

命名格式化字符串

通常情况下,Python使用tuple传递字符串模板预留位置的值。实际上,可以依次命名预留位置,然后使用dict传入变量:

msg = '''%(student.name)s is %(student.age)d years old.'''
item = {"student.name": "XiaoMing", "student.age": 16}
print(msg % item)
# XiaoMing is 16 years old.

完整使用参考:

%[(name)][flags][width].[precision]typecode
  • (name):命名
  • flags:右对齐(+),左对齐(-),正数左侧填充一个空格使之与负数对齐(),使用0填充(0
  • width:显示宽度
  • precision:小数点后精度
  • typecode:格式类型码,例如字符串(%s%r),单个字符(%c),二、八、十、十六进制整数(%b, %o, %d, %x),浮点是(%f

其中width, precision为两个整数,可以利用*来动态代入:

s = "%*.*f" %(5,4,1.234)
print(s)
# 1.2340