【问题标题】:Remove a substring if repeated more than once sequentially如果按顺序重复多次,则删除子字符串
【发布时间】:2022-01-09 23:28:07
【问题描述】:

我有一个清单

my_list=['Hello jose','jjjj','jack signal','jjjjjj']

我试过了

[i.replace('j','') for i in my_list]

我的输出:

['hello ose', '', 'ackpot', '']

我的预期输出:

['Hello jose','','jackpot','']

如果子字符串 'j' 紧挨着另一个重复,如何删除它?

【问题讨论】:

  • [i.replace('jj', '') for i in my_list]?如果您有奇数个js,不确定这是否会产生您想要的结果。
  • 你想替换任何重复的字符还是只替换'j'?
  • @DYZ 我猜只有j; "hello" 在示例中仍然存在。
  • @j1-lee 我宁愿听听 OP 的解释。
  • @DYZ 你是对的!

标签: python python-3.x string substring


【解决方案1】:

你可以使用正则表达式:

import re

my_list=['Hello jose','jjjj','jack signal','jjjjjj']

output = [re.sub(r"(.)\1+", "", s) for s in my_list]
print(output) # ['Heo jose', '', 'jack signal', '']

【讨论】:

  • 要替换的字符串,也可以使用r"jj+"
【解决方案2】:

您要查找的正则表达式如下:

output = [re.sub(r"(.)\1{2,}", "", s) for s in my_list]

它查找并替换任何字符"(.)",后跟两个或多个相同"\1{2,}" 的副本。 "\1" 是对括号中匹配项的引用。

【讨论】:

    【解决方案3】:

    您可以做的一件事是检查'j' 的连续重复,如果没有找到,则将其附加到临时字符串并替换为my_list,就像这样...

    my_list=['Hello jose','jjjj','jack signal','jjjjjj']
    
    for i in range(len(my_list)):
        temp_str, my_str, flag = "", my_list[i], 0
    
        for j in range(len(my_str)-1):
            if (my_str[j] == "j") and (my_str[j] == my_str[j+1]):
                continue
            else:
                temp_str += my_str[j]; flag=1
        else:
            temp_str += my_str[-1] if flag else ""
    
        my_list[i] = temp_str
    
    print(my_list)
    

    输出:-

    ['Hello jose', '', 'jack signal', '']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      相关资源
      最近更新 更多