为什么我不能更改字符串中的子字符串?

时间:2018-02-26 02:06:32

标签: python python-3.x

我正在尝试编写一个函数,将字符串中的专用字转换为星号。基本上,我想从字符串中检查一个单词(例如,如果我将“World”作为专用单词,请将“Hello World”更改为“Hello *****”)。我尝试编写以下代码,但代码不会将单词转换为星号。

def censor(text, word):

    a = text.split()

    replace = ""

    for i in word:
        replace += "*"

    for i in a:
        if i == word:
            i = replace

    result =' '.join(a)

    return result

有人能帮助我吗?除了行i = replace之外,代码中的所有内容似乎都有效。

谢谢!

4 个答案:

答案 0 :(得分:2)

i = replace将名为i的变量重新绑定到replace中的字符串。它不会像您期望的那样更新列表。您可以使用索引将replace分配给列表中的项目来修复代码:

for idx, s in enumerate(a):
    if s == word:
        a[i] = replace

现在,列表a中的项目将会更新。

答案 1 :(得分:2)

如果您只是想更改字符串中的子字符串,可以使用以下内容:

def censor(text, word):
    return text.replace(word, '*'*len(word))

这将替换word的所有*个实例,并为len(word)添加censor(text, word): a = [w if w!=word else '*'*len(w) for w in text.split()] return ' '.join(a) 秒。

我的回答只是意识到问题是,如果你想要审查"世界"但不是"世界破坏者",你会遇到问题,因为你最终会得到" *****破坏者"。

在这种情况下,我会说做类似的事情:

w

在第二行,我们让每个text.split()word中的一个字词)保留,除非它是*,在这种情况下我们将其替换为def censor(text, word): a = text.split() for i, v in enumerate(a): if v == word: a[i] = "*"*len(v) return ' '.join(a) print censor("Hello World", "World") &#39 ;足以填补。然后我们用空格加入它并返回

答案 2 :(得分:1)

这可能会有所帮助

Hello *****

输出:

...

const sql = require('mssql')

...

// Create connection to database
const databaseConfig = {
  userName: 'USER_NAME',
  password: 'PASSWORD',
  server: 'SERVER_NAMECLOUDAPP.AZURE.COM',
  database: 'DATABASE',
  options: {
       encrypt: true // Use this if you're on Windows Azure
   }
}

...

答案 3 :(得分:0)

您始终可以使用find()方法。

def replaceWord(word, sentence):
    # find the starting position
    posStart = sentence.find(word)

    # find the ending position
    posEnd = posStart + sentence[posStart:].find(" ") - 1

    # Get the word
    new_word = sentence[posStart:posEnd+1]

    # Turn word into a list
    list_word = list(new_word)

    # Find length of word
    word_length = len(sentence[posStart:posEnd + 1])

    # replace the word with "*"
    star = ""
    for i in list_word:
        star = star + i.replace(i, "*")

    # Add back in sentence
    new_sentence = sentence[0:posStart - 1] + " " + star + " " + sentence[posEnd +2:]
    return new_sentence

print(replaceWord("fox", "The fox is there"))