1

大規模なコレクションを含む配列リストがあり、入力文字列が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毎回オリジナルから派生しているため、の最後の要素のみarrtemp返されます。代わりにこれを試してください:

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 に答える