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

代码解释

  1. 分割字符串: 使用 split() 方法将字符串按空格分割成单词列表。split() 默认按任意多的空白字符(如空格、换行符等)分割。
  2. 反转单词列表:使用切片操作 words[::-1] 将单词列表反转。
  3. 组合字符串:使用 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() 方法将它们重新组合成一个字符串。

注意事项

  1. 标点符号:如果需要保留标点符号,使用正则表达式可以更精确地分割单词和标点符号。
  2. 空格处理:在重新组合字符串时,可以根据需要调整单词之间的空格。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)