使用string.replace(x,y)替换所有

时间:2017-11-04 12:31:11

标签: python str-replace

我刚刚开始学习python,并希望使用string.replace(x,y)。

具体而言,将所有内容全部替换为X和x,取决于该字母是否最初大写。

e.g。 John S. Smith - > Xxxx X. Xxxxx

我目前创建的内容如下。

Free

然而,当我输入像#34; John Smith"这样的文字时。我的回复是" xJxoxhxnx xSx.x xSxmxixtxhx"。

提前谢谢!

编辑:虽然string.replace(x,y)的执行时间可能会更长,但我想在找到执行相同操作的更快更短的方法之前慢慢建立我的知识。如果用string.replace(x,y)而不是re.sub

来解释它,我会非常感激。

Edit2:我被告知string.replace是错误的工具。谢谢您的帮助!我会读到re.sub。

7 个答案:

答案 0 :(得分:3)

import re
print("Enter text to translate:", end ="")
sentence = input()
replaced = re.sub("[A-Z]", 'X', re.sub("[a-z]", 'x', sentence))
print replaced

使用re.sub替换字符串的单个字符或遍历字符串。

答案 1 :(得分:3)

如果您坚持使用replace,即使它是错误的工作工具(因为它一次只能替换一个字母并且每次都必须遍历整个字符串),这是一种方式:< / p>

>>> s = 'John S. Smith'
>>> for c in s:
        if c.islower():
            s = s.replace(c, 'x')
        if c.isupper():
            s = s.replace(c, 'X')

>>> s
'Xxxx X. Xxxxx'

有点整齐有效的方式:

>>> ''.join('x' * c.islower() or 'X' * c.isupper() or c for c in s)
'Xxxx X. Xxxxx'

一种正则表达方式:

>>> re.sub('[A-Z]', 'X', re.sub('[a-z]', 'x', s))
'Xxxx X. Xxxxx'

答案 2 :(得分:2)

不是用于字符串替换的正确用法。 你可以做两件事:

答案 3 :(得分:2)

平原:

>>> my_string = "John S. Smith"
>>> replaced = ''
>>> for character in my_string:
    if character.isupper():
        replaced += 'X'
    elif character.islower():
        replaced += 'x'
    else:
        replaced += character    

>>> replaced
'Xxxx X. Xxxxx'

一个班轮:

>>> ''.join('x' if c.islower() else 'X' if c.isupper() else c for c in my_string)
'Xxxx X. Xxxxx'

答案 4 :(得分:1)

print("Enter text to translate:", end ="")
sentence = input ()
replaced = ''.join(['x' if (i>='a' and i<='z') else 'X' if (i>='A' and i<='Z') else i for i in sentence])
print(replaced)

答案 5 :(得分:0)

**编辑固定代码**

尝试这一点,这是一个简单且易于破解的例子,但这是你需要达到你想要的东西:

s = "Testing This"
r = ""

for c in s:
    if c.isalpha():
        if c.islower():
            r += "x"
        else:
            r += "X"
    else:
        r += c

print(r)

答案 6 :(得分:0)

您可以使用re模块,并为re.sub提供回调函数来实现此目的。

import re

def get_capital(ch):
    if ch.isupper():
        return "X"
    return "x"

def get_capitals(s):
    return re.sub("[a-zA-Z]", lambda ch: get_capital(ch.group(0)), s)

print(get_capitals("John S. Smith"))

有输出:

Xxxx X. Xxxxx

作为一种风格问题,我并没有将这些内容浓缩成lambda或one-liners,尽管你可能会这样做。

这将比重复连接快得多。