我在python中处理文本并且有几个缺少字符的情况,如:
_ = self.navigationController?.popViewController(animated: true)
在test_list中缺少所有撇号,我写了一个函数来重新添加它:
test_list = ['people can t believe','we couldn t be happier','let s not forget']
这种作品:
def add_apostrophe(sentense):
words = sentense.split()
fixed_s = []
flag = False
buffer_ = ''
for w in reversed(words):
if flag:
fixed_s.append(''.join([w,buffer_]))
flag = False
buffer_ = ''
elif w in ['t','s']:
flag = True
buffer_ = "'{}".format(w)
else:
fixed_s.append(w)
fixed_s = ' '.join(reversed(fixed_s))
return fixed_s
但是我认为这可能会在某些情况下打破句子,我还没有对它进行详尽的测试。 此外,这似乎是一个常见的问题,是一些库恢复缺失的撇号和其他一些字符?
答案 0 :(得分:2)
你可以用正则表达式来做。但这可能不是详尽的报道。
import re
test_list = ['people can t believe','we couldn t be happier','let s not forget']
print [re.sub(r"(\s?)([a-zA-Z]+)\s([a-zA-Z]{1})\s",r"\1\2'\3 ", a) for a in test_list]
输出:
["people can't believe", "we couldn't be happier", "let's not forget"]
正则表达式解释:
(\ S')([A-ZA-Z] +)\ S([A-ZA-Z] {1})\ S
(\ s?) - 匹配并捕获0或1个空格作为组1
([a-zA-Z] +) - 匹配和捕获1个或多个字母作为组2
\ s - 匹配1个空格
([a-zA-Z] {1}) - 匹配并捕获1个字母作为组3
\ s - 匹配1个空格
\ 1,\ 2和\ 3 - 第1组,第2组和第3组