You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则表达式:如何排除字符串最后三个单词?

问题需求
  • 处理一个由至少4个单词组成的字符串,单词间用空格分隔(来自Linux下nmcli命令的输出)
  • 单词之间可能存在多个连续空格
  • 需要编写Python函数,获取字符串开头部分,排除最后三个单词,且保留原有的空格格式(如示例3中保留word1和word2之间的3个空格)

示例说明

1) input_string = "word1    word2 word3      word4"
                   ----- 
                     |--> 函数返回 'word1'

2) input_string = "word1 word2 word3      word4 word5"
                   ----------- 
                        |--> 函数返回 'word1 word2'(word1和word2之间仅一个空格)

3) input_string = "word1    word2 word3      word4 word5"
                   -------------- 
                          |--> 函数返回 'word1    word2'(word1和word2之间保留原有的3个空格)

现有代码问题

尝试的代码如下,该代码在示例1、2中有效,但示例3中会把多个空格压缩成单个,无法保留原空格格式:

def func(input_string):
    input_string = " ".join(input_string.split())
    l = len(input_string)
    start_string = input_string[0]
    if l > 4:
       i = 1
       start_string += ' '
       while i < l - 3:
           start_string += input_string[i]
           i += 1
           if i == l - 3:
               break
           else:
               start_string += ' '
    return start_string

解决方案:正则表达式实现

可以使用正则表达式匹配并捕获最后三个单词之前的内容,同时保留原始空格。以下是两种可行实现:

实现方式一:分组捕获

import re

def get_prefix_exclude_last_three_words(input_string):
    # 匹配任意内容,直到最后三个由空格分隔的单词(允许多空格)
    pattern = r'^(.*?)\s+(?:\S+\s+){2}\S+$'
    match = re.match(pattern, input_string.strip())
    if match:
        return match.group(1)
    # 处理刚好4个单词的情况,返回第一个单词
    pattern_4_words = r'^(\S+)\s+(?:\S+\s+){2}\S+$'
    match_4 = re.match(pattern_4_words, input_string.strip())
    if match_4:
        return match_4.group(1)
    return input_string  # 按题目要求输入至少4个单词,此异常情况可忽略

正则逻辑解释

  • ^:匹配字符串开头
  • (.*?):非贪婪模式捕获前缀内容,保留原始空格
  • \s+:匹配一个或多个连续空格
  • (?:\S+\s+){2}:非捕获组,匹配两个「单词+多空格」的组合
  • \S+$:匹配最后一个单词,直到字符串结尾

实现方式二:正向预查(更简洁)

import re

def get_prefix_exclude_last_three_words(input_string):
    # 正向预查匹配最后三个单词的位置,捕获之前的内容
    pattern = r'^(.*?)(?=\s+\S+\s+\S+\s+\S+$)'
    match = re.search(pattern, input_string.strip())
    if match:
        result = match.group(1)
        # 处理刚好4个单词时的末尾空格问题
        return result.rstrip() if result.endswith(' ') else result
    return input_string

测试示例3:

input_str = "word1    word2 word3      word4 word5"
print(get_prefix_exclude_last_three_words(input_str))  # 输出 'word1    word2'

内容的提问来源于stack exchange,提问作者User051209

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:32:47