在python中用占位符替换字符串

在python中用占位符替换字符串,python,Python,我试图用占位符替换变量,比如XXX。“hello”和“morning”这两个词按原样打印,因为它们出现在另一个列表中。下面的代码可以工作,但会打印额外的占位符 import re mylist = ['hello', 'morning'] nm = [ "Hello World Robot Morning.", "Hello Aniket Fine Morning.", "Hello Paresh Good and bad Morning.", ] def pun

我试图用占位符替换变量,比如XXX。“hello”和“morning”这两个词按原样打印,因为它们出现在另一个列表中。下面的代码可以工作,但会打印额外的占位符

import re

mylist = ['hello', 'morning']
nm = [
    "Hello World Robot Morning.",
    "Hello Aniket Fine Morning.",
    "Hello Paresh Good and bad Morning.",
]



def punctuations(string):
    pattern = re.compile(r"(?u)\b\w\w+\b")
    result = pattern.match(string)
    myword = result.group()
    return myword


for x in nm:
    newlist = list()
    for y in x.split():
        for z in mylist:
            if z.lower() == punctuations(y.lower()):
                newlist.append(y)
            else:
                newlist.append("xxx")
    print(newlist)
输出:

['Hello', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'Morning.']
['Hello', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'Morning.']
['Hello', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'Morning.']
预期产出:

['Hello', 'xxx', 'xxx',  'Morning.']
['Hello', 'xxx', 'xxx',   'Morning.']
['Hello', 'xxx', 'xxx', 'xxx', 'xxx', 'Morning.']

当您找到单词时,只有在检查了
my_list
中的所有元素后,您才必须中断,如果您找到了什么,请评估,如果没有,请附加占位符

for x in nm:
    newlist = list()
    for y in x.split():
        for z in mylist:
            if z.lower() == punctuations(y.lower()):
                newlist.append(y)
                break
        else:
            newlist.append('xxx')
    print(newlist)

当您找到单词时,只有在检查了
my_list
中的所有元素后,您才必须中断,如果您找到了什么,请评估,如果没有,请附加占位符

for x in nm:
    newlist = list()
    for y in x.split():
        for z in mylist:
            if z.lower() == punctuations(y.lower()):
                newlist.append(y)
                break
        else:
            newlist.append('xxx')
    print(newlist)

您正在使用python的普通字符串函数和正则表达式,而实际上,通过正式解析使用解析表达式语法(PEP)可以更好地解决您的问题:

例如:

将pyparsing导入为pp
expr=pp.OneOrMore(pp.Word(“hello”)| pp.Word(“world”)| pp.Word(pp.alphas).setParseAction(pp.replacetwith(“XXX”))
expr.parseString(“hello foo bar world”)
收益率:

(['hello',XXX',XXX',world'],{})

请参阅模块和。

您正在学习python的普通字符串函数和正则表达式,而实际上,使用解析表达式语法(PEP)进行形式解析可以更好地解决您的问题:

例如:

将pyparsing导入为pp
expr=pp.OneOrMore(pp.Word(“hello”)| pp.Word(“world”)| pp.Word(pp.alphas).setParseAction(pp.replacetwith(“XXX”))
expr.parseString(“hello foo bar world”)
收益率:

(['hello',XXX',XXX',world'],{})

请参阅模块和。

您能否解释您的代码,这是一个任意的练习,还是任何特定的目的?您能否解释您的代码,这是一个任意的练习,还是任何特定的目的?很好,您捕获了OPs代码的基本行为,并找到了一个有效的库(和concept
PEG
)来优雅地解决它,您捕获了OPs代码的基本行为,并找到了一个有效的库(以及concept
PEG
)来优雅地解决它