Skip to main content
 首页 » 编程设计

python之删除每个单词除第一个字母外的所有字母并保留标点符号

2025年05月04日16zhwl

我有一个名为“MyTextFile.txt”的文本文件。我想删除所有字母并在它们的位置放置破折号每个单词的第一个字母除外,同时保留标点符号。

假设文本文件“MyTextFile.txt”包含以下字符串:

男孩去了学校,然后吃了早餐! 哇,这不是一个好故事!?

想要的结果是这样的:

T-- b-- w-- t- t-- s----- , t-- a-- h-- b------ ! W-- , t--- 的 n-- 一个 n--- s---- ! ?

这是我的工作,几乎不错,但并不完美!

import nltk 
file_content = open("MyTextFile.txt", encoding='utf8').read() 
tokens = nltk.word_tokenize(file_content) 
print(tokens) 
 
first_letter = [i[0] for i in tokens] 
 
new_words = ' '.join(first_letter).strip() 
print(new_words) 
appendFile = open('results_file.txt', 'w', encoding='utf8') 
appendFile.write(new_words) 

我的输出是这样的:

T b w t t s , t a h b ! W , t’s nan s ! ?

请您参考如下方法:

这种操作最好用正则表达式来完成:

import re 
txt = "This is a test!" 
dashed = re.sub(r"([A-Za-z])([A-Za-z]+)", lambda m: m[1] + "-"*len(m[2]), txt) 
print (dashed) 

将输出:T--- i- a t---!

并将其应用于文件:

with open("input_file.txt", 'r') as i: 
    with open("output_file.txt", 'w') as o: 
        for txt in i: 
            dashed = re.sub(r"([A-Za-z])([A-Za-z]+)", lambda m: m[1] + "-"*len(m[2]), txt) 
            o.write(dashed + '\n')