python字符串格式化

1.8.12.格式化字符转

  • 概念:格式化字符串是指指定一个模板,该模板留出一些空位,再根据需要填上相应的内容

  • 通过操作符%实现:''% [-][+][0[m][.n]'格式化字符串%exp

  • 参数说明:

    • [ ]:表示内容可选

    • -:左对齐

    • +:右对齐

    • 0:右对齐,用0填充空白,一般配合参数m使用

    • m:宽度

    • n:小数保留数

    • %格式化字符如下表:

格式化字符作用格式化字符作用
%s字符串%r字符串
%c单个字符%o八进制
%d或%i十进制整数%e指数
%x十六进制整数%E指数
%f或%F浮点数%%字符%
str1='编号:%05d\t公司名称:%s官网:http://www.%s.com'
str2=(1,'百度','baidu')
str3=(2,'腾讯','qq')
str4=(3,'字节跳动','bytedance')
print(str1%str2)
print(str1%str3)
print(str1%str4)

1.8.13.通过format()方法实现

python2.6版本以后推荐使用format()方法格式化字符串

格式:str.format(args)

参数分析

str:字符串显示的样式即模板

grgs:需要转换的对象,若有多项可以使用逗号分隔

占位符:{}和:

模板格式:{index:fill aglin sign # width.percision type}

index:索引位置,从0开始,若省略则自动分配

fill:空白填充的字符

aglin:对齐方式,一般与width配合

<:左对齐

>:右对齐

=:内容右对齐,只对数字类型有效,即将数字放在填充字符的最右侧

^:内容居中

sign:指定有无符号

+:正数

负数

空格:正数加正数,负数加符号

#:值为二、八、十六进制时,数字显示0b、0o、0x的前缀

width:宽度

.percision:保留的小数位数

type:类型

import math as m
​
print('¥{:,.2f}元'.format(2000000 + 2345))
print('{0:E}'.format(230000.1))
print('{:.7f}'.format(m.pi))
print('二进制:{:#b}'.format(1001))
print('八进制:{:#o}'.format(1001))
print('十六进制:{:#x}'.format(1001))
print('天才是由{:.0%}的灵感,加上{:.0%}的汗水!'.format(0.01,0.99))

1.8.14.python常见的字符串编码

  • ASCLL码:对10个数字、52英文大小写字母、其他字符进行编号,最多表示256个字符,每个字符占1B

  • GBK\GBK2312:中文汉字编码,1B表示英文字母,2B表示汉字

  • Unicode和UTF-8的关系

    • Unicode:称为万国码、统一码,用于满足跨国语言、跨平台的文件转换处理要求

    • unicode表示字符太浪费空间,为了解决字符的存储和传输问题而产生了UTF编码

  • UTF:(unicode transformation format):对unicode进行转换,以便于在存储和传输时节省空间和时间

    • UTF-8:使用1、2、3、4个字节表示字符,有先使用1B表示字符,无法满足时增加1B,最多4B,英文占1B,欧洲语系占2B,东亚语系占3B,其他的特殊字符占4B

    • UTF-16:使用2、4字表示字符

    • UTF-32:使用4B表示字符

    • 总结:UTF编码是为了UNICODE编码设计的一种存储和传输时节省空间的编码方案

  • python的2种字符串类型

    • str:在内存中使用unicode表示字符串

    • bytes:字节类型,网络传输或存储时磁盘时使用二进制数据表示,以b开头如:

b'\xs2\xb0'
  • 使用encode()方法编码

    • 作用:将字符串转为二进制(bytes)数据

    • 格式:strname.encode(encoding='编码格式')

    • 编码格式:可省略,默认UTF-8,也可以省略encoding=

str1='书山有路勤为径'
by1=str1.encode('GBK')
by2=str1.encode()
print('原串:',str1)
print('转为GBK:',by1)
print('转为UTF-8:',by2)
  • 使用decode()解码

    • 解码:将bytes类型二进制数据转换为字符串

    • 格式:bytes.decode(endcoding='UTF-8')

str1='学海无涯苦作舟'
by1=str1.encode('GBK')
​
print('解码后:',by1.decode('GBK'))

1.9.正则表达式

1.9.1.正则表达式用于描述字符串的复杂文本规则的代码,一般用于查询匹配

1.9.2.常见元字符

  • 作用表示特殊含义,一般为范围性、不好确切描述的字符串

  • 单字符匹配的元字符

字符功能
.匹配任意1个字符
[ ]匹配[ ]中列举的字符
\d匹配0-9数字
\D匹配非数字
\s匹配空白(空格,tab)
\w匹配0-9、a-z、A-Z、下划线、汉字
\W匹配非\w的字符
  • 数量元字符

字符功能
*匹配前面的字符0次或多次、可有可无
匹配前面的字符一次或0次,至少有1次,要么没有
+匹配前面字符1次或多次
{m}匹配前面字符出现m次
{m,}匹配前面字符至少出现m
{m,n}匹配前面字符至少出现m次,最多n次
  • 边界字符

字符功能
^行首
&行尾
\b匹配单词的开始或结束,分节符为空格
\B匹配非单词边界
  • 其他字符

字符功能
[^]排除
\转义
  • 分组元字符

字符功能
|匹配左右两边任意一个表达式
(ab)将括号中的字符作为一个分组

4.9.3.示例

  • 匹配8位qq号

^\d{8}$
  • 匹配任意元音字母

[aeiou]
  • 匹配身份证号:18位,前17位为数字时,最后一位为x或X进行校验

(^\d{17})(\d|X|x)$
  • 匹配输入的163、126、qq、邮箱,前面至少5位最多11位

r'\w{5,11}@(163|126|qq).(com|cn)'
  • 检索python文件名为:xxx.py

r'\w+\.py\b'

1.9.4.re模块

  • 需要加载:import re

  • math()方法

    • 格式:re.math(pattern,string,[fiags])

    • 作用:从字符串起始位置开始查询匹配,成功返回math对象,否则返回None,只能匹配一个

    • pattern:使用正则表达式表示的模式字符串

    • string:要匹配的字符串

    • flags:可省略,表示标志位,控制匹配方法。如:是否区分大小写字母

标志作用
AASCLL
I不区分大小写字母
M将^和¥应用于一行
S使用(.)匹配所有字符
X忽略空格、注释等

例1:匹配字符串是否以mr_开头,不分大小写

import re
p=r'mr_\w+' #模式字符串
str1='MR_SHOP mr_shop'
m=re.match(p,str1,re.I)
print(m)
​
​
#返回的对象内置多个功能方法
print('匹配值得起始位置:',m.start())
print('匹配值得结束位置:',m.end())
print('匹配位置的元组:',m.span())
print('匹配的数据:',m.group())
​
​
#只能在起始位置匹配
str2='123MR_SHOP me_shop'
n=re.match(p,str2,re.I)
print(n)

例2:验证输入的手机号是否为中国移动的号码

import re
m=input('请输入手机号:')
p=r'(13[4-9]\d{8})$ | (15[01289]\d{8})$'
mt=re.match(p,m)
if mt==None:
    print('不是移动号段')
else:
    print(m,'是有效的中国移动手机号')
  • search()方法匹配

    • 作用:在字符串任意位置进行检索第一个匹配的值,成功返回search对象,不成功返回None

    • 格式:re.search(pattern,string,[fiags])

    • 例:上例修改

import re
p=r'mr_\w+' #模式字符串
str1='123MR_SHOP mr_shop'
m=re.search(p,str1,re.I)
print(m)
  • findall()方法

    • 作用:在字符串中检索所有符合正则表达式规则的字符串,并以列表的形式返回,不成功返回列表

    • 格式:re.findall(pattern,string,[fiags])

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流年ꦿ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值