【问题标题】:Python: Replacing arbitrary substrings with substringsPython:用子字符串替换任意子字符串
【发布时间】:2016-12-24 17:28:46
【问题描述】:

很抱歉,如果之前有人问过这个问题,但我已经为此苦苦挣扎了好几个星期了。

我试图弄清楚如何用另一个特定的子字符串替换任意字符串中的特定子字符串。

IE:

如果我让用户输入任意字符串,我想用“UOP”之类的东西替换“MAA”的任何实例。

我的代码:

cstring = input("Enter a character string: ")


for i in cstring:
    if ((i != 'M') and (i != 'U') and (i != 'I')):
        break
    else:
        if (cstring[-1] == 'I'):
            cstring = cstring + 'U'
        if (cstring[:1] == 'M'):
            cstring = cstring + cstring[1:]
        if ('III' in cstring):
            cstring = cstring[:i] + "U" + cstring[i:]
        if ('UU' in cstring):
            cstring = cstring[:i] + '' + cstring[i:]
        break
print(cstring)

谢谢!

【问题讨论】:

  • 至于为什么你的代码不起作用,你在两个条件中都有break语句,所以for循环在第一次迭代后被强制停止。
  • 正如 Tadhg 所说,不要使用break,只需使用continue。不过,这看起来不像是我的任务,看起来更像是研究/科学代码,可能用于某种基于用户输入的配置或其他东西。
  • 这不是作业题,而是教程题。我被告知 cstring.replace() 方法不适用于此,我应该使用切片来保持适当的索引一致性。
  • 但是感谢中断问题哈哈。我完全没有注意到这一点。

标签: python string indexing slice


【解决方案1】:

您可以像这样使用String replace 方法:

cstring.replace("MAA,"UOP")

但是,如果您想自己编写代码,这可行:

cstring = input("Enter a character string: ")


for i in range (0, len(cstring)):
    if (len(cstring[i:]) >= 3 and cstring[i] == "M" and cstring[i+1] == "A" and cstring[i+2] == "A"):
        cstring = cstring[:i] + "UOP" + cstring[i+3:]
print(cstring)

【讨论】:

  • 如果 "M" 是最后 2 个字符之一,您手动执行的代码将引发索引错误。
【解决方案2】:

正如其他用户所指出的,您可以使用str.replace。以下是一些其他选项:

正则表达式

这可能是要走的路,因为您可以使用替换字符串替换任何正则表达式,并具有各种 re 标志的所有优点。

import re
re.sub("MAA", "UOP", cstring)

验证输入字符串

如果您的最终目标是使用带有一些简单替换的字符串,您也可以尝试在输入级别强制执行此操作。即

cstring = input("Enter a valid character string: ")
while bool(re.search("invalid_characters_regex", cstring)):
    print("Your input contained invalid characters, please try again.")
    cstring = input("Enter a valid character string: ")

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2016-09-17
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    相关资源
    最近更新 更多