【自然语言处理】NLP入门(二):1、正则表达式与Python中的实现(2):字符串格式化输出(%、format()、f-string)

文章目录

  • 一、前言
  • 二、正则表达式与Python中的实现
    • 1.字符串构造
    • [2. 字符串截取](#2. 字符串截取)
    • [3. 字符串格式化输出](#3. 字符串格式化输出)
      • [3.1 %符号格式化字符串](#3.1 %符号格式化字符串)
        • [1. 一般形式](#1. 一般形式)
        • [2. 常用格式字符](#2. 常用格式字符)
        • [3. 最小宽度和精度](#3. 最小宽度和精度)
        • [4. 进位制和科学计数法](#4. 进位制和科学计数法)
        • [5. 多个对象的格式化输出](#5. 多个对象的格式化输出)
        • [6. 典例](#6. 典例)
      • [3.2 format()方法格式化字符串](#3.2 format()方法格式化字符串)
        • [1. 一般形式](#1. 一般形式)
        • [2. 参数传递](#2. 参数传递)
        • [3. 格式控制标记](#3. 格式控制标记)
        • [4. 对齐方式](#4. 对齐方式)
      • [3.3 f-string 格式化字符串](#3.3 f-string 格式化字符串)

一、前言

自然语言处理涉及字符串构造、截取与格式化输出等基础操作,本文将介绍使用%、format()、f-string方法格式化字符串。

二、正则表达式与Python中的实现

1.字符串构造

2. 字符串截取

【自然语言处理】NLP入门(一):1、正则表达式与Python中的实现(1):字符串构造、字符串截取

3. 字符串格式化输出

字符串格式化输出是将变量或常量的值按照特定的格式插入到字符串中,形成新的字符串 。字符串格式化涉及到两个概念:格式和格式化

  • 格式化:把变量(常量)的值按照某种模式进行表征并嵌入到一个字符串中,形成新的字符串。
  • 格式 :指的是所采用的这种模式 ,在格式化字符串时会使用特定的格式规则来决定如何将变量或常量的值嵌入到目标字符串中。
    • 字符串格式化输出可以使用不同的格式规则,如占位符、格式化指令、模板字符串等方式来指定变量或常量嵌入到目标字符串中的方式。
  • 3 种模式
    • (1)%
    • (2)format()
    • (3)f-string

3.1 %符号格式化字符串

%符号格式化字符串是一种传统的格式化方法,通过在字符串中使用占位符 % 和格式化字符串中的参数来实现格式化输出。

1. 一般形式

字符串格式化的一般形式为:"wwww %rrrrr www"%x,其中:

2. 常用格式字符

常用的格式字符及其含义如下:

格式字符 说明
%c 格式化字符或编码
%s 格式化字符串
%d, %i 格式化整数
%u 格式化无符号整数
%% 输出字符 %
%o 格式化八进制数
%x 格式化十六进制数
%f, %F 格式化浮点数,可指定小数位数
%e, %E 用科学计数法格式化浮点数
%g, %G 根据值的大小采用科学计数法或者浮点数形式格式化浮点数
3. 最小宽度和精度
  • 最小宽度是转换后的值所保留的最小字符个数。
  • 精度(对于数字来说)则是结果中应该包含的小数位数。
python 复制代码
'%f' % 3.1416
  • 输出 '3.141600',单独的%f默认保留6位小数
python 复制代码
'%.2f' % 3.1416
  • 输出 '3.14',指定保留2位小数
python 复制代码
'%6.2f' % 3.1416
  • 输出 ' 3.14',保留2位小数,宽度为6,空位填空格
python 复制代码
'%07.2f' % 3.1416
  • 输出 '0003.14',保留2位小数,宽度为7,空位填0
python 复制代码
'%+07.2f' % 3.1416
  • 输出 '+003.14',保留2位小数,宽度为7,正数加正号,空位填0
python 复制代码
'%-7.2f' % -3.1416
  • 输出 '-3.14 ',保留2位小数,宽度为7,空位填空格,左对齐输出
4. 进位制和科学计数法

可以将一个数转换成不同的进位制,也可按科学计数法进行转换。

python 复制代码
a = 123456
'%o' % a  # 输出 '361100',转换为八进制串
'%x' % a  # 输出 '1e240',转换为十六进制串
'%e' % 12345.678  # 输出 '1.234568e+04',转换为科学计数法串
5. 多个对象的格式化输出

可以一次转换多个对象,这些对象表示成一个元组形式,位置与格式化字符一一对应。

python 复制代码
'%s, %4d, %s' % (3.456727, 89, 'Lily')  
  • 输出 '3.46, 89, Lily'
6. 典例
python 复制代码
x = 10
name = 'Lily'
age = 18
pi = 3.1415926

# 常规示例
print("Value of x is %d" % x)  # 输出 'Value of x is 10'
print("My name is %s, I am %d years old" % (name, age))  # 输出 'My name is Lily, I am 18 years old'

# 格式化整数示例
print("Decimal: %d, Octal: %o, Hexadecimal: %x" % (x, x, x))  # 输出 'Decimal: 10, Octal: 12, Hexadecimal: a'

# 格式化浮点数示例
print("Pi value with default precision: %f" % pi)  # 输出 'Pi value with default precision: 3.141593'
print("Pi value with 2 decimal places: %.2f" % pi)  # 输出 'Pi value with 2 decimal places: 3.14'

# 格式化科学计数法示例
print("Pi value in scientific notation: %e" % pi)  # 输出 'Pi value in scientific notation: 3.141593e+00'

# 最小宽度和精度示例
print("Width 8: %8d" % x)  # 输出 'Width 8:       10'
print("Width 8 with leading zeros: %08d" % x)  # 输出 'Width 8 with leading zeros: 00000010'
print("Pi with width 10 and precision 3: %10.3f" % pi)  # 输出 'Pi with width 10 and precision 3:      3.142'

# 对正数加正号示例
print("Positive number with sign: %+d" % x)  # 输出 'Positive number with sign: +10'

# 左对齐输出示例
print("Left-aligned string: %-10s" % name)  # 输出 'Left-aligned string: Lily      '

# 其他进制示例
print("Binary: %b" % x)  # 输出 'Binary: 1010'
print("Octal: %#o" % x)  # 输出 'Octal: 0o12'
print("Hexadecimal: %#x" % x)  # 输出 'Hexadecimal: 0xa'

# 字符串格式化拓展示例
print("Value of x is {}, My name is {}, I am {} years old".format(x, name, age))  # 使用format()方法进行字符串格式化
print(f"Value of x is {x}, My name is {name}, I am {age} years old")  # 使用f-string进行字符串格式化

%符号格式化字符串方法在早期版本的Python中广泛使用,但在Python 3中,推荐使用format()方法或f-string进行字符串的格式化输出。

3.2 format()方法格式化字符串

format()方法是一种更加灵活和易读的字符串格式化方法,它使用 {} 占位符和format()方法中的参数来进行格式化。

1. 一般形式
python 复制代码
'www{<参数序号>: <格式控制标记>}www'.format(x)

其中,{}用来标记格式化的位置,<参数序号>指定传递的参数序号,<格式控制标记>用于控制格式化的方式。

python 复制代码
name = 'Bob'
age = 25
formatted_string = "Name: {}, Age: {}".format(name, age)
print(formatted_string)  # 输出: Name: Bob, Age: 25

format()方法中,使用 {} 占位符指定插入变量的位置,可以在占位符中指定参数的顺序,也可以使用索引指定参数的顺序。

python 复制代码
formatted_string = "Name: {1}, Age: {0}".format(age, name)
print(formatted_string)  # 输出: Name: Bob, Age: 25
2. 参数传递

下述代码均输出:'我叫张清,今年18岁'

  • 可以根据位置来传递参数;
python 复制代码
'我叫{},今年{}岁'.format('张清',18)
  • 也可以通过索引值来引用位置参数,参数索引从0开始
python 复制代码
'我叫{0},今年{1}岁'.format('张清',18)
python 复制代码
'我叫{1},今年{0}岁'.format(18, '张清')
  • 还可以使用序列,通过序列参数的位置索引和序列中元素索引来引用相应值
python 复制代码
my = ['张清', 18]
'我叫{0[0]},今年{0[1]}岁'.format(my)
  • 同时也可以直接将序列解包,通过位置依次将序列中的元素传递到目标字符串中
python 复制代码
'我叫{},今年{}岁'.format(*my)
  • 另外还支持使用关键参数的形式,可以通过关键字来指定参数的值。例如:
python 复制代码
'我叫{name},今年{age}岁'.format(name='张清', age=18)
  • 也可用**字典名的形式将字典中的元素作为参数
python 复制代码
my = {'name': '张清', 'age': 18}
'我叫{name},今年{age}岁'.format(**my)
3. 格式控制标记

format()方法还支持一些格式控制标记,比如进位制、千分位格式化、对齐方式等。

python 复制代码
'{0:.2f}'.format(2/3)  # 保留两位小数
  • 输出:'0.67'
python 复制代码
'{0:b}'.format(8)      # 二进制
  • 输出:'1000'
python 复制代码
'{0:o}'.format(8)      # 八进制
  • 输出:'10'
python 复制代码
'{0:x}'.format(18)     # 十六进制
  • 输出:'12'
python 复制代码
'{:,}'.format(1234567890)  # 千分位格式化
  • 输出:'1,234,567,890'
4. 对齐方式
python 复制代码
'{0:*>10}'.format(18)  # 右对齐
  • 输出:'********18'
python 复制代码
'{0:*<10}'.format(18)  # 左对齐
  • 输出:'18********'
python 复制代码
'{0:*^10}'.format(18)  # 居中对齐
  • 输出:'18'
python 复制代码
'{0:*=10}'.format(-18)  # *放在-和18中间
  • 输出:'-*******18'
python 复制代码
'{0:_},{0:#x}'.format(9999)  # _作为分隔符
  • 输出:'9_999,0x270f'

3.3 f-string 格式化字符串

Python 3.6及以上版本引入了 f-string,它是一种在字符串前加上 fF,在字符串中直接使用变量名或表达式进行格式化的方法。

python 复制代码
name = 'Charlie'
age = 20
formatted_string = f"Name: {name}, Age: {age}"
print(formatted_string)  
  • 输出: Name: Charlie, Age: 20

字符串格式化输出在实际编程中非常常用,能够使代码更加清晰、易读,并且可以灵活地处理不同类型的数据。

相关推荐
郭庆汝5 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
思则变8 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络9 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find10 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取11 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector13 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习13 小时前
Python入门Day2
开发语言·python
Vertira13 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉13 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗13 小时前
黑马python(二十四)
开发语言·python