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

如何移除含西里尔文TXT文件行尾的短连字符?

解决行尾短连字符移除问题

你的代码未生效的核心原因是:读取的每行末尾通常带有换行符(\n或Windows下的\r\n),导致行的实际结尾是-\n,而removesuffix('-')只会匹配**字符串最后一个字符就是-**的情况,自然匹配不到目标连字符。

另外也需要确认:你文件中的“短连字符”是否是标准ASCII连字符(U+002D)——如果是西里尔文场景下的特殊连字符(比如非断字连字符U+2010),也需要调整匹配字符。

以下是几种可靠的解决方案:

方法1:手动处理换行符后移除连字符

先剥离行尾的换行符,处理连字符后再补回换行,逻辑清晰直观:

with open('dim.txt','r',encoding='utf-8') as f1, open('n_dim.txt','w',encoding='utf-8') as f2:
    for line in f1:
        # 仅移除换行相关字符,保留其他行尾空白
        stripped_line = line.rstrip('\n\r')
        # 判断并移除行尾连字符
        if stripped_line.endswith('-'):
            stripped_line = stripped_line[:-1]
        # 写回时补回换行符
        f2.write(stripped_line + '\n')

方法2:用正则表达式匹配行尾连字符

正则可以更灵活地处理行尾可能存在的空白(比如空格、制表符)+ 连字符的情况:

import re

with open('dim.txt','r',encoding='utf-8') as f1, open('n_dim.txt','w',encoding='utf-8') as f2:
    for line in f1:
        # 替换行尾的连字符,保留后续的空白/换行
        modified_line = re.sub(r'-(\s*)$', r'\1', line)
        f2.write(modified_line)

特殊连字符的处理

如果文件中的连字符不是标准ASCII -,可以用以下代码查看字符编码:

with open('dim.txt','r',encoding='utf-8') as f:
    # 取任意一行带连字符的行
    line = f.readline()
    # 打印行尾2个字符的Unicode编码
    print([ord(c) for c in line.strip()[-2:]])

比如输出[8208]对应U+2010非断字连字符,此时只需将代码中的'-'替换为'\u2010'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:33:16