无法从python中删除字符串中的额外连字符?

时间:2013-09-20 00:10:49

标签: python string

def checkio(line):
   list.remove(max("---"))
   list.remove(min("--"))
   return line

if __name__ == '__main__':
    assert checkio('I---like--python') == "I-like-python", 'Example'

$我试图从字符串中删除“---”和“ - ”我喜欢python并且它似乎没有工作。有帮助吗?

3 个答案:

答案 0 :(得分:3)

我认为你不想要list.remove()。这从列表中删除了一个项目。实际上,你根本就没有列表。

max()可以使用,但它所做的只是返回一个破折号。

看起来像正则表达式的作业:

import re
def checkio(line):
    reutrn re.sub(r'(-)+', r'\1', line)

测试时:

>>> checkio('I---like--python') == "I-like-python"
True

请记住,在python中,字符串是不可变的,因此如果list.remove修改了字符串,则代码将无效。 re.sub不会修改字符串,但返回被替换的字符串,因此我们必须将其分配给变量(或者,在这种情况下,只返回它)。

答案 1 :(得分:1)

我会使用正则表达式:

>>> import re
>>> source = "String-----with-hyphens-nohypenshere--morehyphenshere-----------"
>>> string = re.sub(r'-+', '-', source)
>>> string
'String-with-hyphens-nohypenshere-morehyphenshere-'

以这种方式使用正则表达式,您可以识别并替换^^ O(n)时间。

答案 2 :(得分:0)

如果您只是尝试将每个---替换为-,并将每个--替换为- ...这很容易直接转换为Python:

def checkio(line):
    return line.replace('---', '-').replace('--', '-')

(如果你想修复用一个-替换两个或多个-字符的任何字符串,无论是2,3还是45,那么它是正则表达式的工作。但是,否则,你只是让问题变得更复杂。你不想只使用你不理解的“魔法代码” - 虽然在某些时候绝对值得学习正则表达式,你不必学习它们来解决这个问题。)