字符串相关的用法

正则表达式

1.【定义】

在 Python 中,字符串是由引号包裹的任意字符组成的不可变序列,用于表示文本类型数据。

字符串可以通过使用 单引号双引号三引号 来定义,用于表示文本信息,如姓名、消息等。

# 使用单引号定义字符串:
name = 'Alice'
# 使用双引号定义字符串:
message = "Hello, world!"
# 使用三引号定义字符串
sql_string = """select * from user where name='tom';"""

1.1 转义字符

转义字符在字符串中用于表示一些特殊字符或序列,以及插入难以直接输入的字符

常见的转义字符包括:\n 表示换行符,\t 表示制表符,\" 表示双引号,\' 表示单引号,\\ 表示反斜杠。

通过使用转义字符,可以在字符串中插入特殊字符或表示这些无法直接输入的内容。

message = "Hello\nWorld!"
print(message)

# output:
# Hello
# World!

1.2 字符串下标

下标是指从 0 开始的数字编号,也称为索引。
在字符串中,每一个字符都会对应一个下标,通过下标可以获取字符串中该下标对应的字符

语法格式:字符串对象[下标]

1.3 编码

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u

在Python3中,所有的字符串都是Unicode字符串。

2.【相关用法】


1.切片

str[start,end]

2.字符串运算符

(1) +
字符串拼接
str1+str2
(2)*
str*num 字符串str的num倍数,重复输出
(3)r/R
引号里的字符串原格式输出(忽略转义字符等)

print(R'xxxx')

(4)in / not in
a in b,返回bool类型

3.转义字符 \

比较常用的:
(1)\n 换行

(2)\ 续行符(在行尾部时)

>>> print("line1 \
... line2 \
... line3")
line1 line2 line3
>>> 

(3)\r 回车 (将后边的字符移动到字符串开头)

>>> print("Hello\rWorld!")
World!
>>> print('google runoob taobao\r123456')
123456 runoob taobao

4.字符串格式化

字符串格式化是一种将变量或值插入到字符串中的过程,以创建具有动态内容的字符串
格式化
4.1 %
最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中

#!/usr/bin/python3
 
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))

4.2 f-string
Python 3.6 及更高版本引入的一种简洁且直观的字符串格式化方法。
以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去
(1)基本用法

>>> name = 'Runoob'
>>> f'Hello {name}'  # 替换变量
'Hello Runoob'
>>> f'{1+2}'         # 使用表达式
'3'

>>> w = {'name': 'Runoob', 'url': 'www.runoob.com'}
>>> f'{w["name"]}: {w["url"]}'
'Runoob: www.runoob.com'

(2)对齐方式
f-string 的格式化选项方式使用同 format() 函数一致
(3)表达式和函数调用
可以使用表达式和函数调用来生成动态的字符串内容。

name = "Alice"
age = 25
greeting = f"{'Hello' if age < 30 else 'Hi'} {name.upper()}"
print(greeting)
# 输出:Hello Alice

在上述示例中,使用了一个条件表达式 {‘Hello’ if age < 30 else ‘Hi’} 来根据年龄的大小选择不同的问候词。

如果年龄小于 30,那么使用 Hello;否则使用 Hi。

同时,在插入变量 name 后,使用了 name.upper() 函数调用来将名称转换为大写字母。
4.3 format()
format() 方法是一种传统的字符串格式化方法。它使用占位符 {} 来表示要插入的变量或值,并通过传递参数来替换这些占位符。
(1)基本用法

name = "Alice"
age = 25
message = "My name is {}, and I am {} years old.".format(name, age)
print(message)
# 输出:My name is Alice, and I am 25 years old.

说明:使用 {} 占位符表示要插入的变量或值。在调用 format() 方法时,通过 参数的顺 序将相应的值传递给占位符,从而替换字符串中的占位符部分。

(2)位置参数
可以在占位符 {} 中使用索引号来指定要插入的参数的位置。

name = "Alice"
age = 25
message = "My name is {0}, and I am {1} years old.".format(name, age)
print(message)
# 输出:My name is Alice, and I am 25 years old.

说明: {0} 表示第一个参数 name 要插入的位置,{1} 表示第二个参数 age 要插入的位置。
(3)关键字参数

name = "Alice"
age = 25
message = "My name is {name}, and I am {age} years old.".format(name=name, age=age)
print(message)
# 输出:My name is Alice, and I am 25 years old.

说明: {name}{age} 分别表示关键字参数 nameage 要插入的位置。通过在 format() 方法中使用关键字参数,可以根据参数名将值插入到相应的位置。
(4)格式化选项
format() 方法中,还可以使用格式化选项来控制插入值的格式,如字段宽度、对齐方式、小数点精度等。
例子1: {:.2f} 是一个格式化选项,它指定了插入的值应该被格式化为带有两位小数的浮点数。

pi = 3.141592653589793
formatted_pi = "The value of pi is approximately {:.2f}".format(pi)
print(formatted_pi)
# 输出:The value of pi is approximately 3.14

例子2:

# 字符串对齐
print("The value is ljust: |{:5}|".format("abc"))
print("The value is rjust: |{:<5}|".format("abc"))
print("The value is rjust: |{:>5}|".format("abc"))
# 数字对齐
print("The value is rjust: |{:5}|".format(11))
print("The value is rjust: |{:<5}|".format(11))
print("The value is rjust: |{:>5}|".format(11))

5.三引号

三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符

#!/usr/bin/python3
 
para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
print (para_str)

结果:
这是一个多行字符串的实例
多行字符串可以使用制表符
TAB (    )。
也可以使用换行符 [ 
 ]。

应用:需要一块HTML或者SQL时可以使用三引号

errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (  
login VARCHAR(8), 
uid INTEGER,
prid INTEGER)
''')

6.字符串内建函数

(1)count(str, beg= 0,end=len(string))
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

(2) find(str, beg=0, end=len(string)) 查找
检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1

字符串查找相关方法:

  • index(sub,start,end) 检测sub是否在字符串中,在的话返回开始索引值,否则抛异常
  • rindex(sub, start, end) 从右侧开始查
  • find(sub,start,end) 检测sub是否在字符串中,在的话返回开始索引值,否则返回-1
  • rfind(sub, start, end) 从右侧开始查

(3)join(seq) 连接
以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
a.join(b)
a是字符串,分隔符
b是列表、元组

print('p'.join(['1','3','4']))
输出:
1p3p4

join()和split()区别
join()是使用固定间隔连接列表/元组的元素
split()是用固定的符号把字符串分割成列表

(4)split 分割
两种:

  • str.split(‘’) 只支持单个切割符号
  • re.split(‘正则表达式’,str) 支持多个分隔符

区别:Python: str.split()和re.split()的区别 - 筱筱的春天 - 博客园

split(str=“”, num=string.count(str))
以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串

c  = 'wuuuw,jsj,j'
    print(c.split(','))
输出:
['wuuuw', 'jsj', 'j']

更多函数请参考 Python3 字符串 | 菜鸟教程

(5)strip() 删除
默认删除字符串头和尾的空字符串(\n\r\t)
str.strip([char]) 删除str里char

(6)replace()
将目标的字符串替换为想要的字符串

# 将原字符串中的school替换为top school
"hogwarts school".replace("school", "top school")

补充
1.startswith()
字符串str是否以xx开头
str.startswith(xx) 返回True,false