Arrays 在python3中替换字符串中的整词

Arrays 在python3中替换字符串中的整词,arrays,regex,string,replace,Arrays,Regex,String,Replace,我需要帮助从一个较长的字符串中替换整个单词,考虑到它们在字符串中的位置,同时替换的单词也在一个列表中,因此我们循环遍历所有单词并替换所有单词。但它不起作用,我还没有找到任何解决这个问题的办法 我的代码是: 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

我需要帮助从一个较长的字符串中替换整个单词,考虑到它们在字符串中的位置,同时替换的单词也在一个列表中,因此我们循环遍历所有单词并替换所有单词。但它不起作用,我还没有找到任何解决这个问题的办法

我的代码是:

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)
我想要的是将“box”和“ban”单词替换为“chair”,而不管它们在字符串末尾或开头的位置如何,也不管它周围有多少空格。它应该只替换“框”和“禁止”字

目前的输出是:

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

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

\bbox|ban\b
它应该在哪里

\b(box|ban)\b
将相关行更改为

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

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

\bbox|ban\b
它应该在哪里

\b(box|ban)\b
将相关行更改为

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

这可能是您想要的:

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']

这可能是您想要的:

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']

你可以找到一个例子。你错过了一个分组结构<代码>重新编译(r'\b(?:'+'|'.join(dictionary)+r'\b')Read@EricDuminil answers。您可以找到一个示例。你错过了一个分组结构
re.compile(r'\b(?:“+”|“.join(dictionary)+r'\b')
Read@EricDuminil answers。这与@Tim Pietzcker的答案有什么区别?@user8244558:不太一样。我想,我们的回答大致是在同一时间。这与@Tim Pietzcker的回答有什么区别?@user8244558:不太可能,不可否认。我想我们大概是在同一时间回答的。