python中字符串常用技巧

一、字符串基础特性

  • 字符串是 不可变对象(immutable)
  • 支持索引 s[0]、切片 s[1:4]、遍历 for c in s
  • 支持 + 拼接、* 重复:"ab" * 3 → "ababab"
1
2
3
s = "Hello"
print(s[0]) # 'H'
print(s[::-1]) # 'olleH'(反转)

二、常用字符串方法(按功能分类)

字符判断类(返回 True/False

方法 功能 示例
.isalpha() 是否全是字母 "abc".isalpha()True
.isdigit() 是否全是数字(0-9) "123".isdigit()True
.isalnum() 是否是字母或数字 "a1".isalnum()True
.isspace() 是否全是空白字符 " \t\n".isspace()True
.islower() 是否全是小写 "hello".islower()True
.isupper() 是否全是大写 "HELLO".isupper()True
.istitle() 是否是标题格式(首字母大写) "Hello".istitle()True
.startswith(prefix) 是否以某字符串开头 "abc".startswith("a")True
.endswith(suffix) 是否以某字符串结尾 "file.txt".endswith(".txt")True

⚠️ 注意:isdigit() 不识别负数、小数;-123str"-123".isdigit()False


分割与合并

.split(sep=None, maxsplit=-1)

  • 按分隔符分割字符串,返回列表
  • sep=None 时按空白(空格、制表符、换行)分割
1
2
3
"hello world".split()           # ['hello', 'world']
"a,b,c".split(",") # ['a', 'b', 'c']
"a,b,c,d".split(",", maxsplit=2) # ['a', 'b', 'c,d'](最多分2次)

.rsplit()

  • 从右边开始分割,其他同 split

.join(iterable)

  • 将可迭代对象中的字符串用指定分隔符连接
1
2
", ".join(['a', 'b', 'c'])      # "a, b, c"
"".join(map(str, [1,2,3])) # "123"

.partition(sep)

  • 分成三部分:(前, sep, 后),只分一次
1
"hello.txt".partition(".")       # ('hello', '.', 'txt')

.rpartition(sep)

  • 从右边开始分

查找与定位

方法 功能 找不到时返回
.find(sub) 返回首次出现的索引 -1
.rfind(sub) 返回最后一次出现的索引 -1
.index(sub) find,但找不到抛 ValueError 抛异常
.rindex(sub) 从右边找,找不到也抛异常 抛异常
1
2
3
4
s = "hello world"
s.find("o") # 4
s.rfind("o") # 7
s.find("xyz") # -1

替换与删除

.replace(old, new, count=-1)

  • 替换子串,count 控制替换次数
1
"hello".replace("l", "x", 1)  # "hexlo"

.strip([chars])

  • 去除首尾字符(默认空白)
1
2
"  hello  ".strip()        # "hello"
"###hello###".strip("#") # "hello"

.lstrip([chars])

  • 只去左边

.rstrip([chars])

  • 只去右边

.removeprefix(prefix)

  • Python 3.9+,去除前缀(如果存在)
1
"hello.txt".removeprefix("hello")  # ".txt"

.removesuffix(suffix)

  • 去除后缀
1
"hello.txt".removesuffix(".txt")  # "hello"

大小写转换

方法 功能
.lower() 全转小写
.upper() 全转大写
.title() 每个单词首字母大写
.capitalize() 整个字符串首字母大写
.swapcase() 大小写互换
1
2
3
4
5
"Hello World".lower()        # "hello world"
"hello".upper() # "HELLO"
"hello world".title() # "Hello World"
"hello".capitalize() # "Hello"
"Hello".swapcase() # "hELLO"

填充与对齐

方法 功能
.center(width, fillchar=' ') 居中,总长 width
.ljust(width, fillchar) 左对齐
.rjust(width, fillchar) 右对齐
.zfill(width) 左补0(常用于数字格式)
1
2
"42".center(10, '-')    # '----42----'
"42".zfill(5) # '00042'

编码与字节转换

方法 功能
.encode(encoding='utf-8') 转为字节串
.decode() 字节串转字符串(在 bytes 对象上)
1
2
"你好".encode('utf-8')     # b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xe4\xbd\xa0'.decode() # '你'

其他实用方法

方法 功能
.count(sub) 子串出现次数
.isspace() 是否全是空白
.isnumeric() 是否是数字(比 isdigit 更广,支持中文数字)
.isdecimal() 是否是十进制数字(最严格)
1
2
3
4
5
"123".isnumeric()     # True
"①".isnumeric() # True(Unicode 数字)
"½".isnumeric() # True
"123".isdecimal() # True
"①".isdecimal() # False

三、字符串格式化(4种方式)

1. % 格式化(旧式,不推荐)

1
"name: %s, age: %d" % ("Alice", 25)

2. .format() 方法(推荐)

1
2
"Hello {name}, you are {age} years old".format(name="Alice", age=25)
"{0} {1} {0}".format("a", "b") # 位置参数

3. f-string(Python 3.6+,最推荐 ✅)

1
2
3
4
5
name = "Alice"
age = 25
f"Hello {name}, you are {age} years old"
f"2+2={2+2}" # 表达式
f"{name:>10}" # 格式化(右对齐10字符)

4. Template(安全插值,适合用户输入)

1
2
3
from string import Template
t = Template("Hello $name")
t.substitute(name="Alice")

四、高级技巧与最佳实践

1. 安全判断字符串是否“可转为数字”

1
2
3
4
5
6
def is_number(s):
try:
float(s)
return True
except ValueError:
return False

支持:"123", "-12.3", "inf", "NaN"


2. 多行字符串(三引号)

1
2
3
4
5
text = """
This is a
multi-line string.
Preserves indentation.
"""

3. 原始字符串(r""),避免转义

1
2
path = r"C:\new\folder\test.txt"  # 不会把 \n 当换行
regex = r"\d+" # 正则常用

4. 字符串拼接性能对比

方式 推荐场景
" ".join(list) 多字符串拼接(高效)✅
f"{a}{b}{c}" 少量变量拼接 ✅
+ 拼接 简单场景,但大量拼接慢 ❌
io.StringIO 极大量动态拼接(日志等)
1
2
3
4
5
6
7
# ✅ 推荐
result = "".join([s1, s2, s3])

# ❌ 避免大量 + 拼接
s = ""
for i in range(10000):
s += str(i) # O(n²) 性能差

5. 使用正则表达式(re 模块)

1
2
3
4
5
import re

re.findall(r'\d+', "a12b34") # ['12', '34']
re.sub(r'\s+', ' ', "a b") # "a b"(合并空白)
re.match(r'^\d+$', "123") # 匹配整串是否为数字

6. 字符串不可变性 → 修改需新建

1
2
3
s = "hello"
# s[0] = 'H' # ❌ 错误!字符串不可变
s = 'H' + s[1:] # ✅ 正确方式

五、常见陷阱与注意事项

问题 说明
isinstance(s, str) type(s) == str 更安全
str.isdigit() 不识别负数 "-" 不是数字字符
中文、Unicode 支持良好 Python 3 默认 UTF-8
字符串比较用 ==,不是 is "abc" == "abc" ✅,"abc" is "abc" ❌(可能缓存)

六、实用工具函数示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# 判断是否为回文
def is_palindrome(s):
s = ''.join(filter(str.isalnum, s.lower()))
return s == s[::-1]

# 提取所有数字
def extract_digits(s):
return ''.join(filter(str.isdigit, s))

# 驼峰转蛇形
def camel_to_snake(s):
import re
return re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', s).lower()