如何解决如果匹配列表元素,则屏蔽子字符串,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 举报,一经查实,本站将立刻删除。