Python入门教程第84篇 常用字符串方法之大小写转换

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第84篇 常用字符串方法之大小写转换相关的知识,希望对你有一定的参考价值。

本篇我们学习字符串大小写转换相关的方法,包括 lower() 、upper()、title()、capitalize()、casefold() 以及 swapcase()。

字符串 lower() 方法

字符串的 lower() 方法用于返回小写形式的字符串,语法如下:

str.lower()

lower() 方法没有任何参数。

lower() 方法不会修改原始字符串,而是返回一个小写形式的字符串副本。

以下示例使用 lower() 方法返回了字符串“Python Lowercase”的小写形式:

s = 'Python Lowercase'
new_s = s.lower()

print(s)
print(new_s)

输出结果如下:

Python Lowercase
python lowercase

字符串 upper() 方法

字符串的 upper() 方法用于返回大写形式的字符串,语法如下:

str.upper()

upper() 方法没有任何参数。

upper() 方法不会修改原始字符串,而是返回一个小写形式的字符串副本。

以下示例使用 upper() 方法返回了字符串“python uppercase”的大写形式:

s = 'python uppercase'
new_s = s.upper()

print(s)
print(new_s)

输出结果如下:

python uppercase
PYTHON UPPERCASE

字符串 title() 方法

标题格式化(titlecase)是一种用于标题的大写样式,每个单词的第一个字母大写,其他字母小写。例如:

Python Title Case Tutorial

注意,标题格式的规则并没有统一的标准。

字符串的 title() 方法可以用于返回一个标题格式化的副本,语法如下:

str.title()

以下示例使用 title() 方法返回了字符串“john doe”的标题格式化形式:

name = 'john doe'.title()
print(name)

输出结果如下:

John Doe

title() 方法将一组连续的字母作为一个单词。这种方式通常没有什么问题,但是当字符串中包含撇号(’)时,结果可能会出乎我们的意料。例如:

s = "They're john's relatives.".title()
print(s)

输出结果如下:

They'Re John'S Relatives.

以上示例中使用了撇号作为单词边界。title() 方法将“They’re”作为两个单独的单词进行处理。

为了解决这个问题,我们需要定义一个包含正则表达式的函数:

import re
def titlecase(s):
    return re.sub(
        r"[A-Za-z]+('[A-Za-z]+)?",
        lambda word: word.group(0).capitalize(),
        s)

关于正则表达式的使用,我们会在后续的教程中进行介绍。

然后使用这个新创建的 titlecase() 函数:

s = "They're john's relatives."
s = titlecase(s)
print(s)

输出结果如下:

They're John's Relatives.

字符串 capitalize() 方法

capitalize() 方法的语法如下:

str.capitalize()

capitalize() 方法没有任何参数,返回字符串 str 首字符大写、其他字符小写的副本。

capitalize() 方法对于 ASCII 字符没有问题,但是无法用于非英语字符。例如,单词开始处的 NJ 字符在克罗地亚语中的显示为 Nj:

Njemačka 

但是,capitalize() 方法返回的是“NJemačka”:

print('Njemačka'.capitalize())

为了解决这个问题,从 Python 3.8 开始,capitalize() 方法会将字符串的第一个字符转换为标题格式,而不是大写形式。

以下示例使用 capitalize() 方法将字符串“now is better than never.”的第一个单词的首字母转换为标题格式:

s = 'now is better than never.'
new_s = s.capitalize()
print(new_s)

输出结果如下:

Now is better than never.

字符串 casefold() 方法

字符串 casefold() 方法与 lower() 方法类似,返回字符串的一个小写形式(casefolded)的副本。

casefold() 方法比 lower() 方法更加激进,它会尝试消除字符串中的所有大小写差异。对于 ASCII 字符,lower() 方法 和 casefold() 方法的效果相同。 return the same result.;对于 Unicode 字符,casefold() 方法会返回更加准确的结果。

例如,字符“ß”在德语中的表示是“ss”。如果使用 lower() 方法,结果就是“ß”,因为它就是小写形式。但是使用 casefold() 方法,结果就是“ss”。

基于以上原因,对于不区分大小写的字符串比较,我们应该使用 casefold() 方法。

以下示例演示了使用 lower() 方法和 casefold() 方法比较字符串的差异:

color1 = 'weiß'
color2 = 'weiss'

print(color1 == color2)  # False
print(color1.lower() == color2.lower())  # False
print(color1.casefold() == color2.casefold())  # True

输出结果如下:

False
False
True

字符串 swapcase() 方法

字符串的 swapcase() 方法用于将字符串中的大写字母转换为小写形式、小写字母转换为大写形式,返回转换后的副本。

swapcase() 方法如下:

str.swapcase()

对于英语字符,str.swapcase().swapcase() 返回的结果和 str 相同。但是,对于非英语字符,结果可能不同。也就是说,以下表达式可能不一定为 True:

str.swapcase().swapcase() == str

下面的示例使用 swapcase() 方法将字符串“Hello”的大小写进行反转:

message = 'Hello'
new_message = message.swapcase()

print(new_message)

输出结果如下:

hELLO

以下示例使用 swapcase() 方法处理非英语字符:

color = 'weiß'
print(color)

new_color = color.swapcase()
print(new_color)

print(color.swapcase().swapcase())
print(color.swapcase().swapcase() == color)  # False

输出结果如下:

weiß
WEISS
weiss
False

“weiß”是一个德语单词,表示英语中的“white”,字母“ß”等价于“ss”。

表达式 color.swapcase() 返回了“WEISS”,所以表达式 color.swapcase().swapcase() 结果为“weiss”。

总结

  • lower() 方法用于返回小写形式的字符串副本。
  • upper() 方法用于返回大写形式的字符串副本。
  • title() 方法用于返回一个标题格式化的字符串副本。
  • capitalize() 方法用于返回首字符大写、其他字符小写的字符串副本。
  • casefold() 方法与 lower() 方法类似,返回小写形式(casefolded)的字符串副本,用于 Unicode 字符比较。
  • swapcase() 方法用于将字符串中的大写字母转换为小写形式、小写字母转换为大写形式,返回转换后的副本。

以上是关于Python入门教程第84篇 常用字符串方法之大小写转换的主要内容,如果未能解决你的问题,请参考以下文章

Python入门教程第85篇 常用字符串方法之大小写判断

Python入门教程第85篇 常用字符串方法之大小写判断

Python入门教程第87篇 常用字符串方法之替换子串

Python入门教程第86篇 常用字符串方法之截断字符串

Python入门教程第88篇 常用字符串方法之字符类型检查

Python入门教程第88篇 常用字符串方法之字符类型检查