1. 数值与布尔型
数值类型
- 整型int
- 浮点型float
布尔型
- True
- False
# 查看数据类型用type()
a = 1
b = 1.1
c = True
d = False
print(type(a),type(b),type(c),type(d))
# 判断时返回的是布尔值
print(a == b)
<class 'int'> <class 'float'> <class 'bool'> <class 'bool'>
False
数值运算可以使用加减乘除等运算,布尔型也可以进行数值运算,进行运算的时候True=1,False=0。
print(a + c)
print(a + d)
print(c + d)
2
1
1
2. 字符串
2.1 字符串的创建
- 用双引号" "和单引号’ ,两者作用基本一致,当引号中套引号的时候,可以混合使用。
- 三引号用于有回车的文本(单双引号都可以用作三引号)。
str1 = 'Hello'
str2 = "python"
str3 = """
人生苦短,
我用Python"""
print(str1,str2,str3,type(str1),type(str2),type(str3))
Hello python
人生苦短,
我用Python <class 'str'> <class 'str'> <class 'str'>
2.2 字符串与数值的相互转换
数值转字符串
- str()强制转化
- repr()转化
a = 1
b = str(a)
c = repr(a)
print(type(b),type(c))
<class 'str'> <class 'str'>
字符串转数值
- int()强制转化为整形
- float()强制转化为浮点型
- eval()转化
import string
a = '1.1'
b = '2'
# 强制转化注意不能将浮点转换为int
e = float(a)
f = int(b)
# eval 可以自动转为整型和浮点型
c = eval(a)
d = eval(b)
print(e,f,c,d,type(e),type(f),type(c),type(d))
1.1 2 1.1 2 <class 'float'> <class 'int'> <class 'float'> <class 'int'>
2.3 字符串的连接、复制和转义
- 连接与复制
a = '人生苦短'
b = '我用Python'
# 字符串连接:用"+"将字符串进行连接
c = a + b
print(c)
# 字符串复制:用"*"将字符串进行复制
d = c * 3
print(d)
人生苦短我用Python
人生苦短我用Python人生苦短我用Python人生苦短我用Python
- 转义:用转义字符‘\’进行转义,更多转义字符应用参考链接
- 如果字符串中需要多个转义字符,可在前面添加一个r
string = 'I'm ok !'
print(string)
File "<ipython-input-143-f0a81863e022>", line 1
string = 'I'm ok !'
^
SyntaxError: invalid syntax
# 不加转义字符则会出错
string = 'I\'m ok !'
print(string)
# 或者用双引号来区分
print("I\'m ok !")
I'm ok !
I'm ok !
string =r"\n\n\t I'm ok !"
string
"\\n\\n\\t I'm ok !"
2.4 字符串的替换、分隔与合并
字符串的替换
- str.replace(old, new,[count])
- old是需要替换的老字符串,
- new是要换成的新字符串,
- count是设置需要替换几次,默认为全部替换。这不是必须参数。
# 举例1
st1 = '我不不不喜欢学Python!'
# 默认全部替换
st2 = st1.replace('不','超',2)
print(st2)
# 设定替换几次
st3 = st1.replace('不','超')
print(st3)
我超超不喜欢学Python!
我超超超喜欢学Python!
字符串的分隔(分隔结果为列表)
- string.split(str, num)
- 以str为标记来分隔
- num设置需要分隔的次数,默认全部
a = '上海,123,321'
b = a.split(',')
c = a.split(',',1)
print(b,c)
['上海', '123', '321'] ['上海', '123,321']
字符串的合并
- string.join(sequence)
- string是需要以什么字符来连接,可以为空字符
- sequence是需要连接的内容,数据格式可以是字符串或序列
lst1 = ['poi', '116.48295868847654', '39.888609210224466']
mark = ''
#连接字符串
st2 = mark.join(lst1)
print(st2)
poi116.4829586884765439.888609210224466
2.5 Python的字符串常用内建函数
指定范围内 str 出现的次数
- string.count(str, beg=0, end=len(string))返回 str 在 string 里面出现的次数,beg 或者 end 指定则返回指定范围内 str 出现的次数
a = '1asdad asda'
a.count('s',0,len(a))
2
指定字符串的编码
- string.encode(encoding=‘UTF-8’, errors=‘strict’)以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
a = '1asdad asda'
a.encode(encoding='UTF-8', errors='strict')
b'1asdad asda'
len(string)返回字符串长度
b = 'absfas'
len(b)
6
大小写转化
- 全部变为大写str.upper()
- 全部变为小写str.lower()
- 大小写字符反转str.swapcase()
c = 'aBc'
print("全变为大写",c.upper())
d = 'aBc'
print("全变为小写",d.lower())
f = 'aBc'
print("大小写反转",d.swapcase())
全变为大写 ABC
全变为小写 abc
大小写反转 AbC
删除空格
- str.lstrip()删除字符串前端的空字符
- str.rstrip()删除字符串末尾的空字符
a = ' sasad s a '
print(a.lstrip())
print(a.rstrip())
sasad s a
sasad s a
判断是否为空字符
- isspace()如果字符串中只包含空白,则返回 True,否则返回 False
a = ' '
a.isspace()
True
判断str是否包含在string中
- string.find(str, beg=0, end=len(string))检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
- string.index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在 string中会报一个异常
g = 'asdsdafasa dsasxa'
h = 'asa'
gg = g.find(h,0,len(g))
hh = g.index(h,0,len(g))
print(gg,hh)
7 7
判断是否全为数字
- string.isdecimal()如果string只包含十进制数字则返回 True 否则返回 False.
- string.isdigit()如果string只包含数字则返回 True 否则返回 False.
- string.isnumeric()如果 string 中只包含数字字符,则返回 True,否则返回 False
a = '18453'
print(a.isdecimal())
a = 'as23'
print(a.isdigit())
a = 'sdf'
print(a.isnumeric())
True
False
False
判断全为字母
- string.isalpha()如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
a = 'sdsfsds'
print(a.isalpha())
a = 'as23s'
print(a.isalpha())
True
False
2.6 字符串截取
str[起始位置:终止位置:间隔],取值为左闭右开,即取不到右边的值
|
# 遍历字符串
for i in 'acsahfnia':
print(i,end='\t')
a c s a h f n i a
# 字符串截取
a = 'PYTHON'
b = a[0:2]
c = a[2:]
d = a[:3:2]
print(b,c,d)
PY THON PT
3. 正则表达式
3.1 正则表达式基础知识
|
|
|
|
3.2 正则表达式实例
正则表达式:字符串模式中判断字符串是否符合一定的标准
search方法,进行比对查找,
- 创建匹配对象pattern
- 创建匹配字符串string
- 匹配方法
- pattern.search(string)
- re.search(pattern,string)
import re
# 创建模式对象
pattern = re.compile('AA') # 此处的AA,为正则表达式,用来验证是否在其他的字符串中
str1 = 'AdasdaHAA'
str2 = 'Asahdjksda'
str3 = 'AAAAAnasfAAdn'
res1 = pattern.search(str1)
res2 = pattern.search(str2)
res3 = pattern.search(str3)
print(res1,'\n',res2,'\n',res3)
<_sre.SRE_Match object; span=(7, 9), match='AA'>
None
<_sre.SRE_Match object; span=(0, 2), match='AA'>
import re
# 创建模式对象
pattern = re.compile('AA') # 此处的AA,为正则表达式,用来验证是否在其他的字符串中
str1 = 'AdasdaHAA'
str2 = 'Asahdjksda'
str3 = 'AAAAAnasfAAdn'
# 简写
res1 = re.search(pattern,str1)
res2 = re.search(pattern,str2)
res3 = re.search(pattern,str3)
print(res1,'\n',res2,'\n',res3)
<_sre.SRE_Match object; span=(7, 9), match='AA'>
None
<_sre.SRE_Match object; span=(0, 2), match='AA'>
findall( )方法,返回匹配的所有的匹配对象,结果为列表
# 匹配特定字母a
pattern1 = "a"
# 匹配A-Z中的所有大写字母
pattern2 = "[A-Z]"
# 匹配A-Z中的所有大写字母,连续的多个大写字母为一个字符输出
pattern3 = "[A-Z]+"
string = "AHjsadfjaHsd"
res1 = re.findall(pattern1,string)
res2 = re.findall(pattern2,string)
res3 = re.findall(pattern3,string)
print(res1,'\n',res2,'\n',res3)
['a', 'a']
['A', 'H', 'H']
['AH', 'H']
sub(匹配对象,替换目标对象,需要进行替换的字符串,替换次数,编译时匹配的模式),替换所有字符
string = 'ashsdjajsa'
# 把所有a换为A
re.sub('a','A',string,2)
'AshsdjAjsa'
re.match(pattern,string,flags=0)
- pattern 匹配的正则表达式
- string 要匹配的字符串
- flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
group(num) 或 groups() 匹配对象函数来获取匹配表达式,在几个地方提取就有(0,num-1)个提取的数据。
import re
a = "CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、\
精品问答、职业培训、技术论坛、资源下载等产品服务,\
提供原创、优质、完整内容的专业IT技术开发社区."
pattern = 'CSDN'
print(re.match(pattern, a).span()) # 在起始位置匹配
print(re.match(pattern, a)) # 不在起始位置匹配
(0, 4)
<_sre.SRE_Match object; span=(0, 4), match='CSDN'>
pat = r"建于"
res = re.match(pat, a)
res
** 建议在正则表达式中,被比较的字符串前面加上r,就不用担心转义字符的问题了。**