我正在尝试根据某些条件替换列表中的字符。
tmp = ['T', 'h', 'e', '/', ' * ', 's', 'k', 'y', ' * ', 'i', 's', '/', '/', 'b', 'l', 'u', 'e']
tmp_string = "".join(tmp)
result = re.sub(r'[\*|/]{2}', ' ', tmp_string)
result = result.title().replace('*', ' ').replace('/', ' ').replace(' ', ' ')
由于与我的预期输出不匹配,我想对代码进行一些更改。
我不希望'is'的'i'大写。
答案 0 :(得分:1)
您可以使用带有三元表达式的生成器来检查字符是否为字母数字:
Map
输出:天空是蓝色的
然后,获得所需的输出:
import re
l = ['T', 'h', 'e', '/', ' * ', 's', 'k', 'y', ' * ', 'i', 's', '/', '/', 'b', 'l', 'u', 'e']
tmp = "".join(char if char.isalpha() else ' ' for char in l)
# This will put spaces where the * and / are
# then use regex to compress the spaces
mystr = re.sub('\s{2,}', ' ', tmp)
print(mystr)
答案 1 :(得分:0)
问题出在title()
上,它将大写字符串的每个第一个字符。 IUCC一个简单的例子将帮助您前进。将title()
与条件一起使用
' '.join([i.title() if i not in ['is','and'] else i for i in 'the sky is blue'.split()])
答案 2 :(得分:0)
尝试
import re
tmp=['T', 'h', 'e', '/', ' * ', 's', 'k', 'y', ' * ', 'i', 's', '/', '/', 'b', 'l', 'u', 'e']
misc_words = ('is', 'the')
tmp_string = "".join(tmp)
result = re.sub(r'[\*|/]', ' ', tmp_string)
result = re.sub(r' +', ' ', result) # replace one or more consecutive spaces with a single space
#result = result.title().replace('*', ' ').replace('/', ' ').replace(' ', ' ') # this is done by fixng the first regex
words = result.split()
new_words = []
for word in words:
if word not in misc_words:
new_words.append(word[0].upper() + word[1:])
else:
new_words.append(word)
print(new_words)