字符串及正则表达式
一、字符串的常用操作
1. 字符串的特性
- 不可变数据类型:字符串创建后不可修改,所有操作会返回新字符串。
s = "Python" s[0] = "J" # 报错:TypeError
2. 常用字符串方法
方法名 | 描述说明 |
---|---|
str.lower() | 将str 字符串全部转成小写字母,结果为一个新的字符串 |
str.upper() | 将str 字符串全部转成大写字母,结果为一个新的字符串 |
str.split(sep=None) | 把str 按照指定的分隔符sep 进行分隔,结果为列表类型 |
str.count(sub) | 返回sub 这个字符串在str 中出现的次数 |
str.find(sub) | 查询sub 这个字符串在str 中是否存在,如果不存在结果为 -1,如果存在,结果为sub 首次出现的索引 |
str.index(sub) | 功能与find() 相同,区别在于要查询的子串sub 不存在时,程序报错 |
str.startswith(s) | 查询字符串str 是否以子串s 开头 |
str.endswith(s) | 查询字符串str 是否以子串s 结尾 |
str.replace(old, new) | 使用new 替换字符串str 中所有的old 字符串,结果是一个新的字符串 |
str.center(width, fillchar) | 字符串str 在指定的宽度范围内居中,可以使用fillchar 进行填充 |
str.join(iter) | 将str 插入到可迭代对象iter 中每个元素之间,连接成一个新的字符串 |
str.strip(chars) | 从字符串str 中去掉左侧和右侧chars 中列出的字符 |
str.lstrip(chars) | 从字符串str 中去掉左侧chars 中列出的字符 |
str.rstrip(chars) | 从字符串str 中去掉右侧chars 中列出的字符 |
二、格式化字符串
1. 三种格式化方式
- 占位符(%):
name = "Alice" age = 25 print("姓名:%s,年龄:%d" % (name, age)) # 姓名:Alice,年龄:25
str.format()
方法:print("坐标:({0}, {1})".format(3.14, 5)) # 坐标:(3.14, 5)
- f-string(Python 3.6+):
price = 19.99 print(f"价格:¥{price:.2f}") # 价格:¥19.99
2. 格式化字符串的详细格式
- 语法:
{ [填充字符][对齐方式][宽度][,][.精度][类型] }
符号 作用 示例 :<
左对齐 f"{'Hi':<5}"
→"Hi "
:>10
右对齐,总宽度10 f"{3.14:>10}"
→" 3.14"
:^
居中对齐 f"{'OK':^4}"
→" OK "
:,
千位分隔符 f"{1000000:,}"
→"1,000,000"
:.2f
保留2位小数 f"{3.1415:.2f}"
→"3.14"
:%
百分比格式 f"{0.25:%}"
→"25.000000%"
:b
二进制格式 f"{10:b}"
→"1010"
三、字符串的编码与解码
1. 编码(encode()
)
- 将字符串转换为字节流(
bytes
类型):s = "你好" b = s.encode("utf-8") # b'\xe4\xbd\xa0\xe5\xa5\xbd'
- 错误处理方式:
# errors参数:strict(默认报错)、ignore(忽略错误)、replace(替换为?) s = "abc®" b = s.encode("ascii", errors="replace") # b'abc?'
2. 解码(decode()
)
- 将字节流转换回字符串:
b = b'\xe4\xbd\xa0\xe5\xa5\xbd' s = b.decode("utf-8") # "你好"
四、数据验证与处理
1. 数据验证方法
方法名 | 描述说明 |
---|---|
str.isdigit() | 所有字符都是数字(阿拉伯数字) |
str.isnumeric() | 所有字符都是数字 |
str.isalpha() | 所有字符都是字母(包含中文字符) |
str.isalnum() | 所有字符都是数字或字母(包含中文字符) |
str.islower() | 所有字符都是小写 |
str.isupper() | 所有字符都是大写 |
str.istitle() | 所有字符都是首字母大写 |
str.isspace() | 所有字符都是空白字符(\n 、\t 等) |
2. 字符串拼接
- 直接拼接:
s = "Hello" + " " + "World" # "Hello World"
join()
方法:lst = ["2023", "10", "01"] s = "-".join(lst) # "2023-10-01"
五、正则表达式
1. 元字符与限定符
- 常用元字符:
元字符 含义 示例 .
匹配任意字符(除换行) a.c
→ “abc”, “a2c”^
匹配字符串开头 ^Hello
→ 匹配开头的Hello$
匹配字符串结尾 World$
→ 匹配结尾的World\d
匹配数字 \d+
→ “123”\w
匹配字母/数字/下划线 \w+
→ “user123” - 限定符:
限定符 含义 示例 *
0次或多次 a*
→ “”, “a”, “aaa”+
1次或多次 \d+
→ “1”, “123”?
0次或1次 a?b
→ “ab”, “b”{m,n}
m到n次 a{2,4}
→ “aa”, “aaa”
2. re
模块常用函数
- 匹配与搜索:
import re # re.match():从开头匹配 print(re.match(r"\d+", "123abc")) # 匹配到"123" # re.search():全局搜索 print(re.search(r"abc", "xyzabc")) # 匹配到"abc"
- 查找与替换:
# re.findall():返回所有匹配项 lst = re.findall(r"\d+", "a=1, b=2") # ["1", "2"] # re.sub():替换匹配项 s = re.sub(r"\d+", "0", "a=1, b=2") # "a=0, b=0"
- 分割字符串:
parts = re.split(r"[,;]", "a,b;c") # ["a", "b", "c"]
六、总结对比
功能 | 方法/符号 | 示例 |
---|---|---|
字符串格式化 | f"{变量:格式}" | f"{3.14:.2f}" → "3.14" |
编码与解码 | encode() / decode() | "你好".encode("utf-8") |
正则匹配数字 | \d+ | re.findall(r"\d+", "a1b2") → [“1”,“2”] |
字符串去空格 | strip() | " Hi ".strip() → "Hi" |