根据条件替换列表中的字符

时间:2019-02-19 13:56:18

标签: python list

我正在尝试根据某些条件替换列表中的字符。

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'大写。

3 个答案:

答案 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)