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

Python实现从Excel复制的字符串块中移除每行末尾连字符

解决Excel复制字符串每行末尾连字符移除的问题

看起来你已经找对了方向用endswith('-'),但问题应该出在没有先把整个字符串拆分成单独的行——毕竟从Excel复制的多行内容是一个包含换行的大字符串,直接用endswith只会检查最后一行的结尾,没法批量处理所有行。

下面给你几种通用的实现方法,覆盖不同的复制场景:

方法1:处理带换行的标准多行字符串(最常见的Excel复制场景)

从Excel复制多行到剪贴板,通常会保留换行符(Windows是\r\n,Unix是\n),这种情况我们可以先拆分每行,再逐个处理末尾的连字符:

# 模拟从Excel复制的多行字符串
raw_text = """(CB)-year-(3F)-year-
(56)-ADDR(01)-DATA(06)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-
(56)-ADDR(01)-DATA(03)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-
(05)-ADDR5-[address0]-(E0)-tWHR2-nintK-
(56)-ADDR(01)-DATA(05)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-"""

# 1. 拆分每行,兼容不同系统的换行符
lines = [line.rstrip('\r') for line in raw_text.split('\n')]

# 2. 逐个处理每行:先去掉行尾空白,再检查并移除末尾的连字符
processed_lines = []
for line in lines:
    cleaned_line = line.rstrip()  # 去掉行尾的空格/制表符等空白
    if cleaned_line.endswith('-'):
        processed_lines.append(cleaned_line[:-1])
    else:
        processed_lines.append(cleaned_line)

# 3. 合并回带换行的字符串
result = '\n'.join(processed_lines)
print(result)

运行后每行末尾的-都会被移除,同时保留原有的换行格式。

方法2:处理被空格替换换行的字符串(特殊复制场景)

如果复制时换行被替换成了空格(比如你的示例字符串那样),可以用正则表达式精准匹配并替换末尾的连字符:

import re

raw_text = "(CB)-year-(3F)-year- (56)-ADDR(01)-DATA(06)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new- (56)-ADDR(01)-DATA(03)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new- (05)-ADDR5-[address0]-(E0)-tWHR2-nintK- (56)-ADDR(01)-DATA(05)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-"

# 匹配所有末尾带'-'的块(包括'- '和最后一个'-')
result = re.sub(r'-(\s|$)', r'\1', raw_text)
print(result)

这个正则会匹配两种情况:-后面跟着空格(行分隔的情况),或者-在字符串末尾,然后把-替换掉,只保留空格或空。

方法3:一行代码搞定的正则简化版

如果你追求简洁,用多行正则可以直接处理带换行的字符串,无需手动拆分:

import re

raw_text = """(CB)-year-(3F)-year-
(56)-ADDR(01)-DATA(06)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-
(56)-ADDR(01)-DATA(03)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-"""

# 匹配每行末尾的'-'(前面可能有空白),替换为空
result = re.sub(r'\s*-?$', '', raw_text, flags=re.MULTILINE)
print(result)

re.MULTILINE让$匹配每行的结尾,\s*-?表示零个或多个空白字符加可选的-,最后替换为空,完美移除行尾的连字符和可能的空白。

为什么之前的endswith没生效?因为你直接对整个大字符串调用endswith('-'),它只会检查整个字符串的最后一个字符,而不是每行的结尾——拆分每行后再处理,才是正确的打开方式哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:25:49