python - 删除每个单词除第一个字母以外的所有字母并保留标点符号
问题描述
我有一个名为“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 !?
解决方案
这种操作最好用正则表达式完成:
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')
推荐阅读
- ruby-on-rails - 生产红宝石中未显示条纹卡元素
- c - C 预处理器 - 在编译时向 Struct 添加元素
- asp.net-mvc - 如何在 MVC 的部分视图中填充导航选项卡上的数据?
- c++ - C++定义静态成员的正确方法是什么
- haskell - 如何在 Haskell 中为 IO 专门化 mapM
- gatling - Gatling:响应时间百分位数和延迟百分位数随时间的差异
- java - Libgdx 播放/暂停音乐
- android - 避免按下后退按钮时关闭 AlertDialog
- regex - 将正则表达式从 pcre 转换为 sed 以拆分字符串
- c++ - 某些输入的基数排序实现失败