微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果匹配列表元素,则屏蔽子字符串,Python

如何解决如果匹配列表元素,则屏蔽子字符串,Python

我有一个任务: 如果字符串的一部分与列表的元素匹配,我需要屏蔽它。

stringValue = "My name is Jackie brown! I am from Louisiana."
surnameList = ["brown","Louisiana",...]

在这个例子中,所需的输出是:

maskedString = "My name is Jackie *****! I am from *****."

屏蔽子串的长度(在本例中为 5 个 *)并不重要,只要字符串被屏蔽即可。

这是我的初始函数

import re
def maskSurname(stringValue,surnameList):
    indexList = []
    splitList = re.sub(r'[^\w\s]',' ',stringValue).split()
    for x in splitList:
        for z in surnameList:
            if x == z:
                index = splitList.index(x)
                indexList.append(index)
    for y in indexList:
        splitList[y] = "*****"
    return listToString(splitList)

这似乎完成了工作,但是,它删除了所有标点符号,这并不理想,但不是主要问题。 函数 maskSurname()输出一个连接列表:

My name is Jackie ***** I am from *****

我将如何更有效地做到这一点?目前,要屏蔽的单词列表包含约 500 个单词。这些词真的没有模式,似乎我不能以我所知道的方式使用正则表达式。 这些函数将与 JSON 数据一起使用。

谢谢。

解决方法

当您可以执行 str.replace 时,为什么要使用正则表达式并增加开销:

>>> stringValue = "My name is Jackie Brown! I am from Louisiana."
>>> surnameList = ["Brown","Louisiana"]
>>> for i in surnameList:
...     stringValue = stringValue.replace(i,"*****")
... 
>>> stringValue
'My name is Jackie *****! I am from *****.'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。