我有一个任务: 如果字符串的一部分与列表的元素匹配,我需要屏蔽它。
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 数据一起使用。
谢谢。
答案 0 :(得分:0)
当您可以执行 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 *****.'