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