1

我有一个包含大量集合的数组列表,并且我有一个输入字符串。如果在输入字符串中找到大集合,它将被给定选项替换。

我尝试了以下但它返回错误:

#!/bin/python
arr=['www.', 'http://', '.com', 'many many many....']
def str_replace(arr, replaceby, original):
  temp = ''
  for n,i in enumerate(arr):
    temp = original.replace(i, replaceby)
  return temp

main ='www.google.com'
main1='www.a.b.c.company.google.co.uk.com'
print str_replace(arr,'',main);

输出:

www.google

预期的:

google
4

4 回答 4

3

temp您每次都从原始元素派生,因此只有最后一个元素arr会在返回的那个中被替换temp。试试这个:

def str_replace(arr, replaceby, original):
  temp = original
  for n,i in enumerate(arr):
    temp = temp.replace(i, replaceby)
  return temp
于 2012-06-07T10:52:56.790 回答
2

你甚至不需要temp(假设上面的代码是整个函数):

def str_replace(search, replace, subject):
    for s in search:
        subject = subject.replace(s, replace)
    return subject

另一个(可能更有效)的选择是使用正则表达式:

import re

def str_replace(search, replace, subject):
    search = '|'.join(map(re.escape, search))
    return re.sub(search, replace, subject)

请注意,如果replace包含来自 的子字符串,这些函数可能会产生不同的结果search

于 2012-06-07T11:01:42.927 回答
1
temp = original.replace(i, replaceby)

它应该是

temp = temp.replace(i, replaceby)

您正在丢弃以前的替换。

于 2012-06-07T10:53:51.380 回答
1

简单的方法:)

arr=['www.', 'http://', '.com', 'many many many....']
main ='http://www.google.com'
for item in arr:
    main = main.replace(item,'')
print main
于 2012-06-07T11:03:34.880 回答