繁体   English   中英

有没有办法检查任何列表元素是否在字符串中并替换它们?

[英]Is there a way to check if any of list elements are in a string and replace them?

这是我尝试过的代码,但它在两种情况下都返回 output

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
for i in alist:
    if i in astring:
        newstring = astring.replace(i, 'True')
        print(newstring)

Output:

True lalala lvlvl lblblbl asasa
bla lalala lvlvl lblblbl True

虽然我需要:

True lalala lvlvl lblblbl True

我建议只拆分astring ,使用列表理解进行替换,然后将其加入:

print(' '.join(['True' if i in alist else i for i in astring.split()]))

产生:

True lalala lvlvl lblblbl True

稍微分解一下:

print(' '.join([
    'True' if i in alist else i 
    for i in astring.split()
]))
  • astring.split() == ['bla', 'lalala', 'lvlvl', 'lblblbl', 'asasa']
  • 'True' if i in alist else ii替换为'True'如果ialist
  • ['True' if i in alist else i for i in astring.split()] == ['True', 'lalala', 'lvlvl', 'lblblbl', 'True']
  • ' '.join(['True', 'lalala', 'lvlvl', 'lblblbl', 'True']将列表转换为单个字符串,并以' '连接列表元素。

str.replace通过用新的替换旧的来返回字符串的新副本并且您没有保存它,因此只需始终保存新副本并执行下一个replace操作

返回字符串的副本,其中所有出现的 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ 旧替换为新

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
    for i in alist:
       if i in astring:
           astring = astring.replace(i,'True')  # True lalala lvlvl lblblbl True
    print(astring)

您可以使用 re.sub 轻松解决此问题

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
print(re.sub("|".join(sorted(alist,key=len,reverse=True)),"True",astring))

您可以使用范围 function 进行迭代并使用该索引替换拆分列表中的单词

def replace(string_data,map_list):

    splited_string = string_data.split()
    for word in range(len(splited_string)):
        if splited_string[word] in map_list:
            splited_string[word] = 'True'
    return " ".join(splited_string)

Output:

'True lalala lvlvl lblblbl True'

你可以用 try 和 except 来 go。

alist = ['bla', 'blblblbl', 'asasa', 'blblblblblb']
astring = 'bla lalala lvlvl lblblbl asasa'
for i in alist:
    try:
        astring = astring.replace(i, 'True')
    except:
        pass
print(astring)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM