1.字符串运算

1.1 拼接字符串

if __name__ == "__main__":
name = "张三"
sex = "男"
# 使用+ 拼接
print("使用 + 拼接 >> ", "姓名:" + name + " 性别:" + sex)
# 使用print 格式化
print("使用 print 格式化 >> 姓名:%s 性别:%s " % (name, sex))
# 使用format
format_var = "姓名:{} 性别:{} ".format(name, sex)
print("使用 format >> ", format_var)

# 使用 + 拼接 >> 姓名:张三 性别:男
# 使用 print 格式化 >> 姓名:张三 性别:男
# 使用 format >> 姓名:张三 性别:男

1.2 重复字符串

if __name__ == "__main__":
name = "张三"
print("使用:* >>", name * 3)

# 使用 * >> 张三张三张三

1.3 截取字符串

if __name__ == "__main__":
str_var = "我的名字叫张三丰~"
print("截取前3个字符串 >>", str_var[:3])
# 第5个是逗号
print("从索引=5,开始截取 >>", str_var[5:])
# 从第索引=1个开始截取,到第5个为止
print("从索引=1,开始截取,到索引=5为止 >>", str_var[1:5])
# [i:j:k] 从索引i(包括)到索引j(不包含),每隔k步获取一个字符
print("演示:[i:j:k]", str_var[1:8:2])


# 截取前3个字符串 >> 我的名
# 从索引=5,开始截取 >> 张三丰~
# 从索引=1,开始截取,到索引=5为止 >> 的名字叫
# 演示:[i:j:k] 的字张丰

1.4 原样输出

if __name__ == "__main__":
str_var = "我的名\n 叫张三丰 \n 哈哈哈"
print("str_var >>", str_var)
# 使用r
r_str_var = r"我的名\n 叫张三丰 \n 哈哈哈"
print("r_str_var >>", r_str_var)

# str_var >> 我的名
# 叫张三丰
# 哈哈哈
# r_str_var >> 我的名\n 叫张三丰 \n 哈哈哈

2. 大小写

2.1 首字母大写

if __name__ == "__main__":
str_var = "my name is liu qing hui"
# 所有字符串首字母大写
print("所有字符串首字母大写 title:", str_var.title())
# 第一个字符串首字母大写
print("第一个字符串首字母大写 capitalize:", str_var.capitalize())

# 所有字符串首字母大写 title: My Name Is Liu Qing Hui
# 第一个字符串首字母大写 capitalize: My name is liu qing hui

2.2 全部大写

if __name__ == "__main__":
str_var = "my name is liu qing hui"
# 全部转大写
print("全部转大写:", str_var.upper())

# 全部转大写: MY NAME IS LIU QING HUI

2.3 全部小写

if __name__ == "__main__":
str_var = "MY NAME IS LIU QING HUI"
# 全部小写
print("全部小写 lower:", str_var.lower())
print("全部小写 casefold :", str_var.casefold())

# 全部小写 lower: my name is liu qing hui
# 全部小写 casefold : my name is liu qing hui

lower()方法只对ASCII字符有效,而casefold()方法对所有Unicode字符都有效.

2.4 大转小和小转大

if __name__ == "__main__":
str_var = "Hello,World"
# 大转小,小转大
print("原字符串:", str_var)
print("大转小,小转大:", str_var.swapcase())

# 原字符串: Hello,World
# 大转小,小转大: hELLO,wORLD

3. 统计

3.1 字符串出现次数

if __name__ == "__main__":
str_var = "abcd,abcd,abcd"
# 所有范围内
print("字符串a出现的次数:", str_var.count("a"))
# 指定范围内
print("str_var[0:7]:", str_var[0:7])
print("字符串a在str_var[0:7]出现的次数:", str_var.count("a", 0, 7))

# 字符串a出现的次数: 3
# str_var[0:7]: abcd,ab
# 字符串a在str_var[0:7]出现的次数: 2

3.2 字符串长度

if __name__ == "__main__":
str_var = "Hi,张三丰"
str_var2 = "Hi"
str_var3 = "张三丰"
print("str_var长度:", len(str_var))
print("str_var2长度:", len(str_var2))
print("str_va3r长度:", len(str_var3))


# str_var长度: 6
# str_var2长度: 2
# str_va3r长度: 3

4. 查找

4.1 字符串是否存在

  • find(): 不存在则返回-1,存在则从返回第一个匹配的索引。
if __name__ == "__main__":
str_var = "Hello,World"
# 所有范围内
print("h是否在字符串中:", str_var.find("h"))
print("o是否在字符串中:", str_var.find("o"))

# h是否在字符串中: -1
# o是否在字符串中: 4

index()find()方法一样,区别是:当子字符串不存在时,index()会报异常,推荐使用find()

4.2 使用

if __name__ == "__main__":
str_var = "Hello,张三"
print("H in str_var >>", "H" in str_var)
print("H not in str_var >>", "H" not in str_var)
print("张三 in str_var >>", "张三" in str_var)

# H in str_var >> True
# H not in str_var >> False
# 张三 in str_var >> True

5. 判断

5.1 是否只包含字符或数字

if __name__ == "__main__":
# 纯英文
str1 = "hello"
print("str1:", str1.isalnum())
# 字母和数字
str2 = "hello123"
print("str2:", str2.isalnum())
# 含有除字母和数字字符
str3 = "hello@123"
print("str3:", str3.isalnum())
# 含有字母和中文
str4 = "hello张三"
print("str4:", str4.isalnum())


# str1: True
# str2: True
# str3: False
# str4: True

5.2 是否只包含字符

if __name__ == "__main__":
# 纯英文
str1 = "hello"
print("str1:", str1.isalpha())
# 字母和数字
str2 = "hello123"
print("str2:", str2.isalpha())
# 含有除字母和数字字符
str3 = "hello@123"
print("str3:", str3.isalpha())
# 含有字母和中文
str4 = "hello张三"
print("str4:", str4.isalpha())

# str1: True
# str2: False
# str3: False
# str4: True

5.3 是否只包含数字字符(0-9)

if __name__ == "__main__":
# 数字和特殊字符
str1 = "123456@"
print("str1:", str1.isdigit())
# 纯数字
str2 = "123456"
print("str2:", str2.isdigit())
# 含有中文和数字
str3 = "张三18"
print("str3:", str3.isdigit())

# str1: False
# str2: True
# str3: False

5.4 是否只包含数字字符

if __name__ == "__main__":
# 纯数字
str1 = "123456"
print("str2:", str1.isnumeric())
# 含有中文数字
str2 = "一2三4五"
print("str2:", str2.isnumeric())

# str1: True
# str2: True

5.5 是否有空白符

空白字符包括空格、制表符、换行符和回车符等

if __name__ == "__main__":
# 空格
str1 = " "
print("str1:", str1.isspace())
# 含有换行符
str2 = "\t\n"
print("str2:", str2.isspace())
str3 = "hello world "
print("str3:", str3.isspace())

# str1: True
# str2: True
# str3: False

5.6 是否首字母大写

if __name__ == "__main__":
str1 = "Hello world"
print("str1:", str1.istitle())
str2 = "Hello World"
print("str2:", str2.istitle())

# str1: False
# str2: True

6.删除和替换

6.1 替换

if __name__ == "__main__":
str1 = "a-b-a-b-a-b-a-b"
print("全部替换结果:", str1.replace("a", "@"))
print("从左往右替换结果1次:", str1.replace("a", "@", 1))
print("从左往右替换结果2次:", str1.replace("a", "@", 2))
print("从左往右替换结果4次:", str1.replace("a", "@", 4))

# 全部替换结果: @-b-@-b-@-b-@-b
# 从左往右替换结果1次: @-b-a-b-a-b-a-b
# 从左往右替换结果2次: @-b-@-b-a-b-a-b
# 从左往右替换结果4次: @-b-@-b-@-b-@-b

6.2 删除

if __name__ == "__main__":
str1 = " 1 # abc@ "
print("删除左右空白:", str1.strip())
print("删除右边空白:", str1.rstrip())
print("删除左边空白:", str1.lstrip())

# 删除左右空白: 1 # abc@
# 删除右边空白: 1 # abc@
# 删除左边空白: 1 # abc@

7.分割和拼接

7.1 分割

if __name__ == "__main__":
str = "Hello,World"
print("res: ", str.split(","))

# res: ['Hello', 'World']

7.2 拼接

if __name__ == "__main__":
list_var = ["a", "b", "c", "d"]
print("res: ", "|".join(list_var))
str1 = "abcd"
print("res2: ", "-".join(str1))

# res: a|b|c|d
# res2: a-b-c-d

8.格式化

if __name__ == "__main__":
# 基础使用,安装顺序填充
format1 = "姓名:{} 年龄:{}"
print(format1.format("张三", 18))
# {?}中使用数字来指定填充哪个值
format2 = "姓名:{1} 年龄:{0}"
print(format2.format("张三", 18))
# 同一个值可以填充多次
format3 = "姓名:{0}{0} 年龄:{1}"
print(format3.format("张三", 18))
# **** 使用键值对填充 ****
format4 = "姓名:{name} 年龄:{age}"
print(format4.format(age=18, name="张三"))

# 姓名:张三 年龄:18
# 姓名:18 年龄:张三
# 姓名:张三张三 年龄:18
# 姓名:张三 年龄:18