学习笔记:Python 面试100讲(基于Python3.x)03-字符串和正则表达式

01-python字符串格式化

一 python语言中有多少种格式化字符串的方法
二 什么是模板字符串,如何使用

答:
一
四种
1.%格式化
2.模板字符串
3.format方法
4.fstring

二
通过Template对象封装,$放置一些占位符,并通过substitute方法用实际的值替换这些占位符
例如:
from string import Template

#要输出一个美元符号的话可以输入两个美元符号
#美元符号加一段字符串相当于一个占位符
template1 = Template("$dollar$$相当于$pounds英镑")
print(template1.substitude(dollar=1,pounds=2))

#如果要固定美元符号后面字符串判定的范围可以用大括号
template2 = Template("${h}ello world")
print(template2.substitude(hello = "abc")) #会报错

02-fstring方法格式化字符串

一 python语言中那种格式化方式可以直接使用变量
二 描述如何使用fstring格式化字符串

答:
一
fstring方式

二
在字符串前面加f,并且字符串里面的变量加大括号
例如:
name = "Bill"
def age():
    return 12
s = f"我是{name},我今年{age()}岁" #不止变量适用,函数、对象都可以

03-字符串基本操作

一 详细描述python字符串支持的详细操作

答:
一
1.通过索引获取字符串中的某个字符

2.分片

3.输出固定数量个同样的字符串
print(20*s) #可以切片输出

4.判断某个字符是否在字符串里
if a in s
if a not in s

5.输出字符串长度
len(s)

6.输出字符串中ASCII码最值的字符
print(max(s))
print(min(s))

7.字符串不像列表一样单独修改某个字符
例如不能进行以下操作:
s【2】 = “e”

04-字符串format格式化

一 字符串format方法有几种指定参数的方式
二 format方法如何格式化字符串

答:
一
1.默认方式(传入的数据和{}一一对应)
2.命名参数
3.位置参数

二
1.
s1 = "Today is {},the temperature is {} degrees."
print(s1.format("Staturday",24)

2.
s2 = "Today is {day},the temperature is {degree} degrees."
print(s2.format(degree = 24, day = "Saturday")

3.
s3 = "{1} is {day},the temperature is {0} degrees."
print(s3.format(24,"Today",day = Saturday)

4.参数可以是对象的属性
class hey:
    def __init__(self):
        self.day = "Saturday"
        self.degree = 24
s4 = "Today is {p.day},the temperature is {p.degree} degrees."
print(s4.format(p = person))

05-让字符串居中显示

一 有哪些方法让字符串居中显示
二用center方法让字符串居中显示,两边补上#号

答:
一
1.center方法
2.format方法

二
1.center方法
print("hell0".center(30, "#"))    #如果是两边是空格的话就不需要第二个参数,30表示占用30个位置
# #是当字符串没有那么长时用来占位的,可替换成其他字符

2.format方法
print("<{:#^30}>".format("hello"))  #format里面的字符串替换大括号的部分并格式化,和整数的格式化差不多,不过多一个冒号
# #是当字符串没有那么长时用来占位的,可替换成其他字符

06-连接列表中的元素值

一 如何将列表中的元素(字符串类型)首尾相接连接在一起
二 字符串的join方法作用是什么,使用join应该注意什么

答:
一
a = ["a","b","c"]
s = "*".join(a) #前面双引号的内容是连接后的分割符

二
1.join方法是连接列表或者元组里面的元素,并可以指定分隔符
2.连接的元素必须是字符串类型,如果不是,要先转换

07-用正则表达式判断字符串中是否含有日期

一 python正则表达式match的作用
二 如果日期是4位年,2位月,2位日(2019-02-02),如何使用正则表达式判断一个字符串中是否含有这个日期

答:
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

一
import re   #re是python中专门处理正则表达式的模块,无需下载
print(re.match(".*hello", hello))   #.*代表一系列字符串,如果不匹配会返回None,匹配则会返回一行我看不懂的东西

二
s = "Today is 2020-02-02."
print(re.match(".*\d{4}-\d{2}-\d{2}.*", s)  #\d代表数字,{}里面表示数字位数

08-寻找字符串中的手机号

一 描述正则表达式中match和search的区别
二 如果一个字符串中含有11位的手机号,请使用正则表达式找到第一个出现的手机号,并输出手机号、开始索引和结束索引

答:
一
match用于匹配,search用于搜索

二
import re
m = re.search("1\d{10}","我的手机号码是15775070768") #如果没匹配就返回None,下面操作match也适用
print(m.group())    #匹配的部分
print(m.start())    #匹配部分在字符串中开始的索引
print(m.end())  #匹配部分在字符串中结束的后一位索引

09-提取电话号的区号、电话号和分机号

一 如何搜索字符串中包含区号和分机号的第一个出现的电话号,并提取电话号中的区号、电话号和分机号。要求如下:
    1.区号是固定3位数字
    2.电话号至少是7位数字
    3.分机号至少是3位数字
    4.区号,电话号和分机号之间用连字符分隔
    电话号案例:024-12345678-3456

答:
一
import re
m = re.search('(\d{3})-(\d{7,})-(\d{3,})', "我的电话号码是024-12345678-3456。")
# 7后面加逗号表示至少七位
if m is not None:
    print(m.group())    #输出匹配项
    print(m.groups())   #输出匹配项的元组,元素按正则表达式里面的括号部分分配
    print(m.groups()[0])    #输出元组的第一项(下面同理)
    print(m.groups()[1])
    print(m.groups()[2])

10-用正则表达式查找字符串里所有的email

一 用正则表达式查找字符串里所有的Email,并输出这些Email。
    要求:所有的Email域名必须是.com或者.net,而且不区分大小写

答:
# 主要用findall函数
import re

s = "我的Email是12138aaa@abc.com,你的Email是8547jkl@Jkl.NET还是12345@156.org呢?"
prefix = '[0-9a-zA-Z]+@[0-9a-zA-Z]+\.'  # 表示邮箱的前缀,中括号表示任意多个0-9、a-z、A-Z的字符,后面的"."要转义
# 正则表达式博大精深,这里浅显理解一下吧
# 第一个参数是正则表达式,第二个是待匹配的字符串,第三个re.I表示忽略大小写
result = re.findall(prefix + "com|" + prefix + "net", s, re.I)
print(result)

#大概理解就好,不是太清晰

11-正则表达式格式化字符串中所有的浮点数

一 用正则表达式查找字符串中所有的浮点数,并格式化这些浮点数,保留小数点后两位,最后将格式化的浮点数替换原来的浮点数,同时输出替换后的结果和替换的次数。
    要求用一条语句实现

答:
import re

'''
1.表示浮点数的正则表达式   '-?\d+(\.\d+)'
    #问号表示负号可有可无,.需要转义,\d+表示匹配一个或者多个数字
2.格式化浮点数    format
3.用sub或者subn替换原来的浮点数(这两个函数用法差不多)
    sub用于替换字符串中所有匹配的字符串,但是只返回替换后的结果
    subn返回一个元组,元组第一个元素返回替换后的结果,第二个元素返回替换后的次数
'''


def fun(matched):
    return format(float(matched.group()), '0.2f')


# 下面看不懂了,为什么fun不需要加括号加参数就能自动传进去matched
# 把fun换成其他字符串就会把待查字符串里的浮点数换成你所更换的字符串
result = re.subn('-?\d+(\.\d+)', fun, "PI is 3.141592654,e is 2.71828183. -0.2+1.3=1.5")
print(result)
print(result[0])
print(result[1])

12-提取HTML页面中所有的URL

一 提取HTML页面中所有的URL
    要求:这些URL都属于a节点的href属性

答:
import re

s = '<a href="https://baidu.com">走进百度</a> <a href="https://leetcode-cn.com/problemset/all/">走进力扣</a>'
# [^>]表示除了>
# *表示任意多个任意字符
result = re.findall('<a[^>]*href="([^>]*)">', s, re.I)
print(result)
for url in result:
    print(url)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值