【问题标题】:Replace whole words in strings in python3 [duplicate]在python3中替换字符串中的整个单词[重复]
【发布时间】:2017-11-21 20:52:47
【问题描述】:

我需要帮助来仅从较长的字符串中替换整个单词,无论它们在字符串中的位置如何,而被替换的单词也在列表中,因此我们遍历所有单词并替换所有单词。 I have tried using this solution 但它不起作用,我还没有找到任何解决这个问题的方法。

我的代码是这样的:

import re

string1="box unbox boxing boxer box box"
string2="ban banana unban ban ban"
string3="box unbox boxing boxer box box ban banana unban ban ban"

dictionary={"box" , "ban"}

var = "chair"

pat = re.compile(r'\b' + '|'.join(dictionary) + r'\b')

string1 = pat.sub(var, string1)
string2 = pat.sub(var, string2)
string3 = pat.sub(var, string3)

print(string1)
print(string2)
print(string3)

我想要的是用“chair”替换“box”和“ban”词,无论它们在字符串的末尾或开头的位置,或者不管它周围有多少空格。它应该只替换原来的“box”和“ban”词。

目前的输出是这样的:

chair unbox chairing chairer chair chair
chair banana unchair chair chair
chair unbox chairing chairer chair chair chair banana unchair chair chair

我希望输出是这样的:

chair unbox boxing boxer chair chair
chair banana unban chair chair
chair unbox boxing boxer chair chair chair banana unban chair chair

【问题讨论】:

  • 你可以找到一个例子here。你错过了一个分组结构。 re.compile(r'\b(?:' + '|'.join(dictionary) + r')\b')
  • 阅读@EricDuminil 的答案。

标签: arrays regex string replace


【解决方案1】:

您的问题是您的正则表达式构造为

\bbox|ban\b

它应该在哪里

\b(box|ban)\b

将相关行改为

pat = re.compile(r'\b(' + '|'.join(dictionary) + r')\b')

【讨论】:

    【解决方案2】:

    这可能是你想要的:

    import re
    
    strings = ["box unbox boxing boxer box box", "ban banana unban ban ban", "box unbox boxing boxer box box ban banana unban ban ban"]
    
    lst = ["box" , "ban"]
    
    rx = re.compile(r'\b(?:{})\b'.format("|".join(lst)))
    
    strings = [rx.sub('chair', string) for string in strings]
    print(strings)
    

    这会产生

    ['chair unbox boxing boxer chair chair', 'chair banana unban chair chair', 'chair unbox boxing boxer chair chair chair banana unban chair chair']
    

    【讨论】:

    • 这和@Tim Pietzcker 的回答有什么区别?
    • @user8244558:不多,诚然。我猜我们确实在大致相同的时间回答了。
    猜你喜欢
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2018-05-07
    • 2017-12-20
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多