034. 编写一个函数,将一个字符串中的所有单词反转
在 Python 中,可以通过多种方式实现将一个字符串中的所有单词反转。
示例代码
def reverse_words(s):
"""
将字符串中的所有单词反转。
参数:
s (str): 要处理的字符串。
返回:
str: 单词反转后的字符串。
"""
# 按空格分割字符串为单词列表
words = s.split()
# 反转单词列表
reversed_words = words[::-1]
# 将反转后的单词列表重新组合成字符串
reversed_string = ' '.join(reversed_words)
return reversed_string
# 测试代码
original_string = "Hello World! This is a test."
reversed_string = reverse_words(original_string)
print("原始字符串:", original_string)
print("单词反转后的字符串:", reversed_string)
运行结果
运行上述代码后,输出如下:
原始字符串: Hello World! This is a test.
单词反转后的字符串: test. a is This World! Hello
代码解释
- 分割字符串: 使用
split()
方法将字符串按空格分割成单词列表。split()
默认按任意多的空白字符(如空格、换行符等)分割。 - 反转单词列表:使用切片操作
words[::-1]
将单词列表反转。 - 组合字符串:使用
join()
方法将反转后的单词列表重新组合成一个字符串,单词之间用空格分隔。
扩展:处理标点符号
如果需要保留单词中的标点符号,可以使用正则表达式来分割单词。以下是一个改进的版本:
import re
def reverse_words(s):
"""
将字符串中的所有单词反转,保留标点符号。
参数:
s (str): 要处理的字符串。
返回:
str: 单词反转后的字符串。
"""
# 使用正则表达式分割字符串为单词和标点符号
words = re.findall(r'\b\w+\b|[^\w\s]', s)
# 反转单词列表
reversed_words = words[::-1]
# 将反转后的单词列表重新组合成字符串
reversed_string = ''.join(reversed_words)
return reversed_string
# 测试代码
original_string = "Hello, World! This is a test."
reversed_string = reverse_words(original_string)
print("原始字符串:", original_string)
print("单词反转后的字符串:", reversed_string)
运行结果
运行上述代码后,输出如下:
原始字符串: Hello, World! This is a test.
单词反转后的字符串: test. a is This World! Hello,
代码解释
正则表达式分割:
-
使用
re.findall(r'\b\w+\b|[^\w\s]', s)
分割字符串。这个正则表达式匹配单词(\b\w+\b
)和标点符号([^\w\s]
)。 -
\b\w+\b
:匹配完整的单词。 -
[^\w\s]
:匹配非单词字符和非空白字符,即标点符号。
反转和组合:反转单词列表后,使用 join()
方法将它们重新组合成一个字符串。
注意事项
- 标点符号:如果需要保留标点符号,使用正则表达式可以更精确地分割单词和标点符号。
- 空格处理:在重新组合字符串时,可以根据需要调整单词之间的空格。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)