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 *****.'
推荐阅读
- javascript - 在 HTML 表格中进行计算时遇到问题
- python - 熊猫 date_range 不返回任何值
- ios - 使用 tableView.beginUpdates() tableView.endUpdates() 执行 didSelectRowAt 时出错
- flutter - Flutter:阻止手势到小部件下方
- spring-boot - 通过 CRUD 存储库调用存储过程
- python - Hashtag 后跟常规文本
- powershell - Powershell ISE函数在预期输出之前输出双字符
- php - 我可以在内部连接子句之前包含一个 where 子句吗
- javers - Javers - 如何避免/禁用 Javers 审计的特定字段?
- error-handling - 有什么方法可以将 std::io::Error 转换为 failure::error::Error?