繁体   English   中英

去除字符外的字符串部分

[英]Strip portions of a string outside a character

目标是遍历字符串列表,并为列表的每个索引删除任何外部格式,如下所示:

例如,说这是给定的列表:

st1 = ['apple', 'none:apple_one', 'two:apple_two:word', 'banana', 'there:banana_one:ban', 'there:bana']

我希望脚本将列表转换为以下格式:

output = ['apple', 'apple_one', 'apple_two', 'banana', 'banana_one', 'there']

请注意, :之外的任何单词都将被删除。 例如'two:apple_two:word' -> 'apple_two'

我试图在for loop使用split(':')函数,然后按顺序为每个转换为列表的字符串索引[1]元素......但是这对我不起作用。 请参阅下面我的测试代码。

for j in st1:
    print(j)
    k = 0
    if ':' in j:
        st1[k] = j.split(':')[1]
    k += 1

    print(st1[k])

output = '\n'.join(st1)

从打印语句中,这是我得到的回报:

apple
none:apple_one
none:apple_one
none:apple_one
two:apple_two:word
none:apple_one
banana
none:apple_one
there:banana_one:ban
none:apple_one
there:bana
none:apple_one

我注意到,对于拆分案例的数量,它输出了许多该字符串,我不确定为什么会这样......如果有人可以帮助解决第一个问题或帮助解决为什么我的输出是这样的不胜感激!

尝试这个:

st1 = ['apple', 'none:apple_one', 'two:apple_two:word', 'banana', 'there:banana_one:ban', 'there:bana']

for i, val in enumerate(st1):
    if ':' in val:
        st1[i] = val.split(':')[1]

output = '\n'.join(st1)

print(output)

输出:

apple
apple_one
apple_two
banana
banana_one
bana

您当前代码的问题在于每次循环运行时您都会将k重置为 0。 这意味着您只能对st1第一个(或索引0 )项目进行操作


单行版本:

'\n'.join(x.split(":")[1] if ":" in x else x for x in st1)

或者,您可以使用re

import re

st1 = ['apple', 'none:apple_one', 'two:apple_two:word', 'banana', 'there:banana_one:ban', 'there:bana']

st2=list(map(lambda x: re.sub(r"(^[^:]*:)|(:[^:]*$)", "", x), st1))

输出:

['apple', 'apple_one', 'apple_two', 'banana', 'banana_one', 'bana']

这个班轮怎么样?

不使用任何库。 :)

>>> [split[1 if len(split) > 1 else 0] for s in st1 if (split := s.split(':',2))]
['apple', 'apple_one', 'apple_two', 'banana', 'banana_one', 'bana']

暂无
暂无

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

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