如果有匹配的单词,则替换整个字符串

2024-10-03 00:24:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一大串单词要清理。很多这样的单词出现多次,每次都写得有点不同,我想把它们规范化。例如,我想替换以下词语:

list = ["resident super", "super live in", "on site superintendent in building", "livein super", "residential super", "superintendent lives in", "on-site super"...]

只需superintendent

我想我可以用

^{pr2}$

但我肯定会错过一些参赛作品。所有的条目都包含单词super,但是有没有一种方法可以用所需的单词替换整个条目?在


Tags: inliveonsite条目规范化单词list
3条回答

我可能误解了你的问题,但你不能用in代替吗?这似乎不能保证正则表达式,因为正则表达式的速度要慢得多。在

例如:

i=0
while i < len(list):
    if 'super' in list[i]:
        list[i] = 'superintendant'
    i+=1

这将把列表中包含super的所有内容替换为superintendent

我不确定我是否理解你的问题,但如果你想用super替换其中的每个元素,我会这样做。在

for index,element in enumerate(listToCheck):
    if "super" in element:
        listToCheck[index]="superintendant"

顺便说一下,不要将变量命名为list,因为它是一个保留的python关键字。在

re.sub方法不替换字符串。不能,因为Python中的字符串是不可变的。对字符串执行替换时,它将返回一个包含所请求更改的新字符串(如果不匹配,则返回原始字符串)。您当前忽略了返回值,因此您的代码没有任何效果。在

但我认为这个问题根本不需要正则表达式。如果要将任何提到单词super的字符串替换为字符串"superintendent",可以使用一个简单的子字符串测试:

for i, item in enumerate(list_of_strings):
    if "super" in item:
        list_of_strings[i] = "superintendent"

这当然比使用当前的正则表达式更容易出现误报。如果需要,您仍然可以将上面代码的结构与regex搜索一起使用(只需将if "super" in item:行更改为if re.search(pattern, item):,然后将pattern设置为与所需字符串匹配的regex)。在

相关问题 更多 >