Python字符串与正则表达式学习笔记

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方法,进行比对查找,

  1. 创建匹配对象pattern
  2. 创建匹配字符串string
  3. 匹配方法
  • 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,就不用担心转义字符的问题了。**

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python学习笔记|字符串正则表达式练习题答案 1. 练习题1: 题目:给定一个字符串s,找出其中的连续的最长的数字串。 答案:可以通过正则表达式来匹配数字串,然后使用max函数找出最长的。 代码示例: import re def find_longest_num_str(s): num_str_list = re.findall('\d+', s) longest_str = max(num_str_list, key=len) return longest_str s = "ab1234c56789def" print(find_longest_num_str(s)) 输出:56789 2. 练习题2: 题目:给定一个字符串s,将其中的每个空格替换为"%20"。 答案:可以通过正则表达式的sub函数来实现替换。 代码示例: import re def replace_space(s): new_s = re.sub(' ', '%20', s) return new_s s = "Hello World" print(replace_space(s)) 输出:Hello%20World 3. 练习题3: 题目:给定一个字符串s,判断它是否为回文字符串。 答案:可以使用切片操作将字符串反转,然后与原字符串进行比较。 代码示例: def is_palindrome(s): return s == s[::-1] s = "abcba" print(is_palindrome(s)) 输出:True ### 回答2: 以下是关于字符串正则表达式练习题的答案: 1. 给定一个字符串s,编写一个函数,返回该字符串的反转字符串。 def reverse_string(s): return s[::-1] 2. 给定一个字符串s,编写一个函数,返回是否是回文字符串。 def is_palindrome(s): return s == s[::-1] 3. 给定一个字符串s和一个字符c,编写一个函数,返回字符串s中字符c的出现次数。 def count_char(s, c): return s.count(c) 4. 给定一个字符串s,编写一个函数,返回字符串s中的所有单词列表。 def split_words(s): return s.split() 5. 给定一个字符串s,编写一个函数,返回字符串s中的所有数字列表。 import re def extract_numbers(s): return re.findall(r'\d+', s) 这只是一些可能的答案,其中的解决方法可以有很多种。每个问题都有不同的解决方案,具体取决于个人的编程风格和需求。希望这些答案能够帮助你理解和学习Python中的字符串正则表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

而又何羡乎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值