替换字符串中的值

时间:2017-10-24 18:53:10

标签: python join split

所以挑战是用一个等长的星号替换一个句子中的特定单词 - 3个字母 - > 3个星号等。

第一部分不起作用,但是第二部分没有 - 任何人都可以批评第一部分,并指出我可能犯的错误,因为逻辑看起来似乎是原来的?

def censor(text, word):
  for c in text:
    if c == word:                         ## this line was totally wrong
      text.replace(c, "*" * len(c))
    return text

下一部分确实有效,然后CodeAcademy的回答有所不同:

def censor(text, word):
  a = "*" * len(word)
  for c in text:
    nw = text.split(word)
  return a.join(nw)

你将如何处理这项任务?

4 个答案:

答案 0 :(得分:1)

第二种解决方案也不完美:

def censor(text, word):
  a = "*" * len(word)
  nw = text.split(word)  # no need for a loop here, one split catches all occurrences
  return a.join(nw)

第一次尝试:

def censor(text, word):
  # for c in text:  # loops char by char
  #  if c == word:  # one character likely won't be your word
  #    text.replace(c, "*" * len(c))  # does nothing, string is immutable
  return text.replace(word, "*" * len(word))  # simple!

答案 1 :(得分:0)

在第一段代码中,你逐字逐句地遍历字符串 - 你永远不会找到一个单词。

在这种情况下我会使用正则表达式import re来加快速度并找到合适的单词。尝试在句子The airplane is in the air now!中屏蔽“空气”一词。

re的示例。

re.sub(r'\bair\b', '***', 'The airplane is in the air now!', flags=re.IGNORECASE)

答案 2 :(得分:0)

你可以试试这个:

s = "hello, how are you?"
word = "hello"
import re
final_string = re.sub("\b"+re.escape(word)+"\b", '*'*len(word), s) 

输出:

'*****, how are you?'

答案 3 :(得分:0)

正则表达式方法很好。另一种方法是用空格分割句子,查找要审查的单词,并用星号替换它。

$(document).ready(function postData() {
        var id = localStorage.getItem('user-id');
        var token = localStorage.getItem('user-token');
        var vars = "id=" + id + "&token=" + token;
        var hr = new XMLHttpRequest();
        var url = "../php/getUsers.php";

          hr.onreadystatechange = function () {
            if (this.readyState == 4 && this.status == 200) {
                var data = JSON.parse(hr.responseText);

                for(var i=0;i<data.length;i++){

                        var templateData = {
                            name: data[i].name,
                            id: data[i].id

                        };
                      var id=templateData['id'];

                      $.get('templates/user.htm', function(templates) {

                            var template = $(templates).filter('#user-template').html();
                            $('#user-container').append(Mustache.render(template, templateData));
                        });
                 //alert("Test"); 
                 }
            }
        }
        hr.open("POST", url, true);
        hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

        hr.send(vars);
    });

尽管如此,这不会起到标点符号的作用。