在使用replace()字符串方法时,什么也不做?

时间:2018-11-30 01:18:20

标签: python string python-3.x

我正在处理一些字符串,并且正在使用replace()从其中删除一些字符,例如:

a = 'monsterr'
new_a = a.replace("rr", "r")
new_a

但是,假设现在我收到以下字符串:

在:

a = 'difference'
new_a = a.replace("rr", "r")
new_a

出局:

'difference'

如果我的字符串不包含rr,如何不返回任何内容?无论如何,只是通过还是什么都不返回?我试图:

def check(a_str):
    if 'rr' in a_str:
        a_str = a_str.replace("rr", "r")
        return a_str
    else:
        pass

但是,它不起作用。对于monster,预期的输出将为空。

2 个答案:

答案 0 :(得分:2)

使用return

def check(a_str):
    if 'rr' in a_str:
        a_str = a_str.replace("rr", "r")
        return a_str

对于列表理解:

a = ["difference", "hinderr"]
x = [i.replace("rr", "r") for i in a]

答案 1 :(得分:2)

就像一个小小的复活节彩蛋一样,我想我也会把这个小宝石也作为一个选项,只要是因为您的问题:

  

如果我的字符串不包含rr,如何不返回任何内容?反正只是通过还是什么都不返回?

使用布尔运算符,您可以将if行完全从check()中删除。

def check(text, dont_want='rr', want='r'):
    replacement = text.replace(dont_want, want)

    return replacement != text and replacement or None
    #checks if there was a change after replacing,
    #if True:    returns replacement
    #if False:   returns None

test = "differrence"
check(test)
#difference

test = "difference"
check(test)
#None

是否考虑使用此un-pythonic,这是另一种选择。另外,这与他的问题类似。

“如果字符串不包含rr,则不返回任何内容”

对于那些不知道它如何工作或为什么起作用的人,(和/或喜欢学习很酷的python技巧,但不知道这一点),那么这里是docs页,介绍了布尔值运算符。

PS

从技术上讲,它是un-pythonic,因为它是ternary运算。这确实与“ Python禅宗”〜import this背道而驰,但我喜欢C风格的语言。