使用“+”号运算符拼接
new_str = str_1 + str_2
#字符串不能与其他数据类型进行拼接,如需拼接需要转化
str()函数语法
new_str = str_1 + str(int_1) # int_1为数值型
UTF-8:一个汉字占3个字节,其他一个占一个字节
len(str_name.encode())
GBK:一个汉字占2个字节,其他一个占一个字节
len(str_name.encode(“gbk”))
len()函数:计算实际多少字符,不以编码区分
len(str_name)
字符串也属于序列,通过切片方法实现
str_name[start:end:step] #与列表切片一致都是通过索引
如果索引不存在会报错,使用try…except语句捕获异常
try:
程序体
except IndexError:
pass
分割字符串是把字符串分割为列表,合并字符串是把列表合并为字符串
split()函数实现字符串分割
list_name = str_name.split(sep,maxsplit)
#sep:指定分割符,如果不指定则默认空字符(空格,换行\n,制表\t)进行分割
#maxsplit:指定分割次数,存在maxsplit时sep必须存在
join()函数实现列表转字符
str_name = string.join(list_name)
#string:指定合并时的分割符,该分割符会写入字符串
count()
检索指定字符在另一个字符串中出现的次数,如果不存在则返回0
语法:
str_name.count(character[,start[,end]])
#str_name:被检索的字符串
#character:需要检索的字符
#start:可选参数,起始位置的索引
#end:可选参数,结束位置的索引
例:
str_name = "qwertyuiop"
renumber = str_name.count("q")
print(renumber)
find()
检索字符串中是否包含指定的字符,存在则返回索引位置,不存在则返回-1
语法:
str_name.find(character[,start[,end]])
index()
与find()类似,但字符不存在时会报错
语法:
str_name.index(character[,start[,end]])
startswith()
检索字符串是否以指定的字符开头。是则返回True,否则返回False
语法:
str_name.startswith (character[,start[,end]])
endswith()
检索字符串是否以指定的字符结尾。是则返回True,否则返回False
语法:
str_name.endswith (character[,start[,end]])
lower()
将字符串中的大写字母转化为小写字母
str_name.lower()
upper()
将字符串中的小写字母转化为大写字母
str_name.upper()
用户输入时,字符串前后一般不出现空格与特殊字符,下面介绍如何去除
strip()
用于去掉字符串左右两边的空格与特殊字符
语法:str_name.strip([character])
character:可选参数,不指定则默认
lstrip()
用于去掉字符串左边的空格与特殊字符
语法:str_name.lstrip([character])
character:可选参数,不指定则默认
rstrip()
用于去掉字符串右边的空格与特殊字符
语法:str_name.rstrip([character])
character:可选参数,不指定则默认
指先制定一个模板,模板中预留空位,然后在空位上添上内容。这些空位需要指定的符号标记(也叫做占位符),这些占位符不会显示出来
语法:”%[-][+][0][m][.n]格式化字符串”%exp
-:可选参数,用于指定左对齐,正数前方无符号,负数前面加负号
+:可选参数,用于指定右对齐,正数前方加正号,负数前面加负号
0:可选参数,表示右对齐,正数前方无符号,负数前面加负号用0填空白处,与参数m一起使用
m:可选参数,占有宽度
.n:可选参数,保留小数点的位数
exp:需要转化的项
格式化字符 | 说明 | 格式化字符 | 说明 |
---|---|---|---|
%s | 字符串(采用str()显示) | %r | 字符串(采用repr()显示) |
%c | 单个字符 | %o | 八进制整数 |
%d %i | 十进制整数 | %e | 指数(基底为e) |
%x | 十六进制整数 | %E | 指数(基底为E) |
%f %F | 浮点数 | %% | 字符% |
str_name = "编号:%06d\n姓名:%s" #定义的一个模板
tuple_name = (23,"张三") #定义一个内容
print(str_name%tuple_name) #转化并打印
format
语法:template.format(args)
args:需要转化的元组
template:字符串模板,内容如下所示
{[index][:[fill][align][sign][#][width][.precision][type]]}
index:可选参数,索引
fill:可选参数,空白处的填充字符
align:可选参数,对齐方式 <左对齐 >右对齐
sign:可选参数,指定有无符号 + -
#:可选参数,指定二进制前缀
width:可选参数,指定宽度
.precision:可选参数,指定小数点位数
type:指定格式化类型
格式化字符 | 说明 | 格式化字符 | 说明 |
---|---|---|---|
s | 对字符串类型格式化 | b | 十进制转二进制 |
d | 十进制整数 | o | 十进制转八进制 |
c | 十进制整数转化为unicode字符 | x X | 十进制转十六进制 |
e E | 转化为科学计数法 | f F | 转浮点数(精确小数点6位) |
g G | e-f或E-F中切换 | % | 转百分数(精确小数点6位) |
print("{0:,.2f}".format(123456))
print("{0:E}".format(154463.12))
print("{:.0%}".format(0.08))
国际通用编码UTF-8,python3.X默认使用,解决了中文乱码问题。我国中文编码标准GBK-GB2312
两种常用的字符串类型
str:Unicode字符(ASCII等),在网络传输或保存到磁盘,需要转化为bytes
bytes:二进制数据,带有b前缀
两种不同类型的字符串不能拼接
str转化为bytes
语法:str_name.encode([encoding=”utf-8”][,errors=”strict”])
[encoding=”utf-8”:可选参数,指定进行转码时采用的字符编码
errors=”strict” :可选参数,指定错误处理方式
bytes转str
语法:bytes_name.decode([encoding=”utf-8”][,errors=”strict”])
[encoding=”utf-8”:可选参数,指定进行转码时采用的字符编码
errors=”strict” :可选参数,指定错误处理方式
记录文本规则的代码
语法:“^”开始,“$”结束
例
^a:匹配以a开头的字符串
b$:匹配以b结尾的字符串
元字符 | 说明 | 举例 |
---|---|---|
\w - | 匹配字母、数字、下划线、汉字 - | “rt_12\n汉字”,能匹配中除\n以外的 |
\W - | 匹配字母、数字、下划线、汉字以外的字符 - | “rt_12\n汉字”,只能匹配\n |
\s | 匹配单个空白图(包括Tab和换行符) | “123\t321”,只能匹配\t |
\S | 匹配除单个空白图(包括Tab和换行符)以外的 | “123\t321”,匹配除\t以外的字符 |
\b | 匹配单词的开始或结束,单词的分界符通常是空格、标点符号、换行 | |
\d | 匹配数字 | |
. | 匹配除换行符以外的任意字符 |
\ber\w*\b 匹配er开头的字符
用于限定匹配数量
限定符 | 说明 | 举例 |
---|---|---|
? | 匹配前面字符<=1次 | googl?e -> google googe |
+ | 匹配前面字符>=1次 | |
* | 匹配前面字符>=0次 | |
{n} | 匹配前面字符n次 | |
{n,} | 匹配前面字符>=n次 | |
{n,m} | 匹配前面字符n到m次 |
例:^\d{8}$ 匹配8位数字
正则表达式查找数字和字母是很简单的,因为已经有了对应这些字符集合的元字符(如“\d”“\w"),但是如果要匹配没有预定义元字符的字符集合(比如元音字母a,c, i,o,u),应该怎么办?
很简单,只需要在方括号里列出它们就行了,像[aciou]可以匹配任何一个英文元音字母,[.?!] 匹配标点符号(“.”“?”或“!”)。也可以轻松地指定一个字符范围,像“[0-9]” 代表的含义与“\d” b就是完全一致的:一位数字; 同理,“[a-z0-9A-Z_ ]”完全等同于“\w" (如果只考虑英文的话)。说明:要想匹配给定字符串中任意一个汉字,可以使用“[u4e00-\u9fa5]"; 如果要匹配连续多个汉字,可以使用“[u4e00-u9fa5]+”。
在3.4小节列出的是匹配符合指定字符集合的字符串。
现在反过来,匹配不符合指定字符集合的字符串。正则表达式提供了“^”字符。
这个元字符在3.1小节中出现过,表示行的开始。
而这里将会放到方括号中,表示排除的意思。
例如:[^a-zA-Z],匹配一个不是字母的字符
身份证号码长度为18位。前17位为数字,最后一位是校验位,可能为数字或字符X。在上面的描述中,包含着条件选择的逻辑,这就需要使用选择字符(|) 来实现。
(^\d{18}$) | (^\d{17})(\d|X|x)$ #身份证匹配规则
将特殊字符转化为普通字符(. ? \)
IP地址匹配规则
[1-9]{1,3}\.[1-9]{1,3}\.[1-9]{1,3}\.[1-9]{1,3}
第一个作用通过3.6知道小括号可改变限定符作用的范围 | * ^
例:(six | four)th 匹配sixth与fourth
第二个作用分组,如.[1-9]{1,3}
当匹配的是一个具体的字符是需要对\进行转义
“\\bm\\w*\\b”
r”\bm\w\b”
导入的re模块没有被引入会报错
match()
从字符串的开始进行匹配,起始位置匹配成功则返回match对象,否则返回None
语法:re.match(pattern,string,[ string])
pattern:模式字符串,正则表达式转化而来
string:需要匹配的字符串
string:标准位,可选参数,控制匹配参数
标志 说明
A或ASCII 对于\w. \W、\b、 B、\d. \D、\s 和\S只进行ASCI匹配(仅适用于Python 3.x)
I或IGNORECASE 执行不区分字母大小写的匹配
M或MULTLINE 将^和$用于包括整个字符串的开始和结尾的每一行(默认情况下,仅适用于整个字符串的开始和结尾处)
S或DOTALL 使用(.)字符匹配所有字符,包括换行符
X或VERBOSE 忽略模式字符串中未转义的空格和注释
import re
pattern = r"mr_\w+"
string = "MR_SHOP12 mr_shop1111111"
match = re.match(pattern,string,re.I)
print(match.start()) #匹配的起始位置
print(match.end()) #匹配的结束位置
print(match.span()) #匹配位置的元组
print(match.string) #匹配的字符串
print(match.group()) #匹配的数据
->>
0
9
(0, 9)
MR_SHOP12 mr_shop1111111
MR_SHOP12
import re
pattern = r"(13[4-9]\d{8})$|(15[01289]\d{8})$" #13开头,[4-9]中任意一个数字为第三位,后面八个整数
mobile_1 = "13844455585"
match = re.match(pattern,mobile_1)
if match == None:
print(mobile_1,"没找到")
else:
print("ok")
search()
语法:re.search(pattern,string,[ string])
整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回match对象,否则返回None
findall()
语法:re.findall(pattern,string,[ string])
在整个字符串中搜索符合正则表达式的字符串,以列表形式返回
sub()
实现字符串替换
re.sub(pattern,repl,string,count,flags)
pattern:模式字符串,由正则表达式转化而来
repl:替换的字符串
string:原始字符串
count:替换的次数 可选参数
flags:标志位 可选参数
import re
pattern = r"1[34578]\d{9}"
string = "3456436343 13456456712"
result = re.sub(pattern,"12345678901",string)
print(result)
split()
split() 方法用于实现根据正则表达式分割字符串,并以列表的形式返回。其作用同字符串对象的split()方法类似,所不同的就是分割字符由模式字符串指定。
语法:re.split(pattern,string,[maxsplit],[flags])
pattern:模式字符串,由正则表达式转化
string:原字符串
maxsplit:可选参数,最大拆分次数
flags:可选参数,标志位,用于控制匹配方式
import re
pattern = r"[.|=|:|/|//]"
url = "https://www.bilibili.com/?spm_id_from=666.25.b_62696c692d6865616465722d6d.1"
result = re.split(pattern,url)
print(result)