用python中的某个单词替换单词列表

用python中的某个单词替换单词列表,python,Python,比如说,如果我有一个段落,我想找到并用一个特定的单词替换其中的特定单词 在定义单词列表之后,我尝试使用for循环来实现这一点 这是我的密码 script = """ In this sense, netting can represent , which gives Howie return on Zachary.""" ROE = ["In", "this"] #the word list I

比如说,如果我有一个段落,我想找到并用一个特定的单词替换其中的特定单词

在定义单词列表之后,我尝试使用for循环来实现这一点

这是我的密码

script = """ In this sense, netting can represent , which gives Howie return on Zachary."""

ROE = ["In", "this"] #the word list I'm defining (the list of words I want it replaced)
for ROE in script: 
 script.replace(ROE, "ROE")

#desired output = ROE ROE sense, netting can represent , which gives Howie return on Zachary.

它实际上不起作用,有人能帮我修一下吗?

您有几个问题:

  • 您不是在要替换的单词列表上循环,而是在
    脚本中的字符上循环
  • 您没有在任何地方分配
    replace
    的结果。这不是就地操作,因为字符串是不可变的
  • 您正在重新分配
    ROE
    变量
  • 请注意,
    replace()
    对单词边界一无所知。您的代码将从
    内部
    转换为
    ROEside
    。如果您想做得更好,可以使用正则表达式并将单词包装在
    \b
    边界中。正则表达式还允许您一次执行所有替换

    import re
    
    regex = re.compile(r'\b(?:' + '|'.join(re.escape(word) for word in ROE) + r')\b')
    script = regex.sub('ROE', script)
    
    这将创建一个正则表达式
    \b(?:In | This)\b
    ,该表达式与任一单词匹配

    script = """ In this sense, netting can represent , which gives Howie return on Zachary."""
    
    
    ROE = ["In", "this"] #the word list I'm defining (the list of words I want it replaced)
    for word in ROE: 
        script = script.replace(word, "ROE")
    
    print(script)
    
    输出:

    ROE ROE sense, netting can represent , which gives Howie return on Zachary.
    

    i、 e.与所需的相同。

    Python中的字符串
    str
    数据类型是不可变的。这意味着,如果要更改字符串,基本上必须创建一个具有更改的新字符串,然后可以将结果分配给变量

    当然,您可以将结果分配给原始字符串分配给的同一变量,该变量可能具有对旧字符串的最后一次引用,从而使其得到清理。但在很短的时间内,字符串总会有一个新的副本

    例如:

    s = 'Hello'
    s += ' world!'
    print(s)
    
    这似乎增加了“世界!”'Hello'将code>添加到现有的
    s
    上,但它实际上只是创建了一个新字符串
    'Hello world!'
    并将其分配给
    s
    ,替换旧的

    在您的例子中,这解释了为什么不能对字符串调用
    .replace()
    ,并期望它发生变化。相反,该方法返回所需的新字符串,您可以将其分配给变量:

    script = """ In this sense, netting can represent , which gives Howie return on Zachary."""
    
    roe = ["In", "this"]
    for word_to_replace in roe: 
        script = script.replace(word_to_replace, 'ROE')
    

    (请注意,还有一些其他问题,但上述问题应该可以解决)

    我找到了一个相对简单的解决方案

    stopwords=['In','this','to']
    for i in stopwords:
     n=a.replace(i,'ROE')
     a=n
    

    我得到了这个链接的帮助:

    使用
    for ROE in…
    您覆盖了
    ROE
    @Barmar之前的内容,但使用该命令,我必须不断重复,我正在将所有单词更改为ROE(我想要的单词),我只是试图简化代码。谢谢你这能回答你的问题吗?在这个问题上,你想要这个答案,对此表示感谢!但我使用的是在线解释器,导入功能实际上不受支持。这就是为什么我试图寻找一个简单的代码,这是疯狂的。Python在没有标准库的情况下完全瘫痪了。我知道WW,但我没有太多地使用它,所以我不想去安装所有东西:))谢谢你的帮助。你确定他们不会自动导入一些常用库,如
    re
    ?你不能使用不同的解释器吗,比如ideone.com或repl.it?嗯,不太确定。我知道repl.it支持导入库,但我这段代码的主要目标是在代码完成我想要的一切后复制输出,我认为repl.it不允许我正确复制输出,或者smth///无论如何,我找到了一个解决方案,这很好!我对这个网站有点陌生,我能问一下,我是否应该在我发布的解决方案上按“已解决”,或者当发布问题的原始人给出答案时,它会自动将其视为已解决?我运行了代码,但它仍然不起作用:((但是谢谢你!不知道你运行了什么代码-我只是将答案中的代码复制并粘贴到一个Python文件中,添加了
    print(script)
    结果是
    ROE-ROE-sense,netting可以表示,这给了豪伊对扎卡里的回报。
    你还期望什么?是的,谢谢你的帮助。我只是太傻了,没有意识到我需要添加打印。很乐意帮忙-如果这回答了问题,请接受带有复选标记的答案,这样其他人就可以找到它了不要看问题来回答它
    stopwords=['In','this','to']
    for i in stopwords:
     n=a.replace(i,'ROE')
     a=n