首页 > 解决方案 > 删除每个单词除第一个字母以外的所有字母并保留标点符号

问题描述

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

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

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

想要的结果是这样的:

T-- b-- w-- t- t-- s----- , t-- a-- h-- b------- !W--- , t--- ' s 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 bwtts,tahb!W, t'snans !?

标签: pythonpython-3.xnltk

解决方案


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

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')

推荐阅读