0

文字列内の部分文字列を検索して、別のパターンに置き換えたい。検索文字列は中括弧の間にあります。

文字列の例

line = $lang['MY_KEY'] = '{search-string} wird in Analyse berücksichtigt';

私はこのコードを試しました:

re.sub('([a-zA-Z0-9\[\]\$\' ].*{).*(}[a-zA-Z\.,; ].*)','\1replace-string\2',line)

そしてまた:

re.sub('(.*{).*(}.*)', '\1replace-string\2', line)

出力にreplace-stringとともにいくつかのジャンク文字が含まれています。

編集

もう1つ質問があります。
中括弧には複数の検索文字列があります。各部分文字列を異なるパターンに置き換えたい。どうすればいいですか?

4

3 に答える 3

2

バックスラッシュがあるので、パターンと置換の前にrを付けます:-

print re.sub(r'([a-zA-Z0-9\[\]\$\' ].*{).*(}[a-zA-Z\.,; ].*)',r'\1replace-string\2',line)

print re.sub(r'(.*{).*(}.*)', r'\1replace-string\2', line)

編集:置換機能を使用して1秒おきに置換

import re
def repl(matchobj):
    global counter
    counter = counter+1
    if counter == 2: 
        return '{replace-string}' 
    else: 
        return matchobj.group(0)

counter = 0
line = "$lang['MY_KEY'] = '{search-string} wird in Analyse {search-string} bercksichtigt'";
print re.sub(r'{.*?}',repl,line)

編集:辞書を使用して置換を保存します

import re
def repl(matchobj):
    global counter
    replacementFor = {'{search-string1}': '{replace-string1}',
                      '{search-string2}': '{replace-string2}',
                      '{search-string3}': '{replace-string3}'}

    counter = counter+1
    if counter == 2: 
        return replacementFor.get(matchobj.group(0), matchobj.group(0))
    else: 
        return matchobj.group(0)

counter = 0
line = "$lang['MY_KEY'] = '{search-string} wird in Analyse {search-string1} bercksichtigt'";
print re.sub(r'{.*?}',repl,line)

counter = 0
line = "$lang['MY_KEY'] = '{search-string} wird in Analyse {search-string3} bercksichtigt'";
print re.sub(r'{.*?}',repl,line)
于 2012-12-05T10:01:13.167 に答える
2

ジャンクキャラクターについてはよくわかりませんが、興味深いことに、何が問題になっていre.sub('{.*}', 'frob', line)ますか?

于 2012-12-05T10:03:50.110 に答える
0

私はこれがあなたのために働くはずだと思います:

line = '{search-string} wird in {Analyse} berücksichtigt'

>>> print re.sub(r'(^.*?{)[^}]*(}.*)', r'\1replace-string\2', line)
{replace-string} wird in {Analyse} berücksichtigt
于 2012-12-05T10:53:20.347 に答える