我想在字符串中搜索子字符串并替换为另一种模式。 搜索字符串位于花括号之间。
示例字符串
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)
我在输出中输入了一些垃圾字符和替换字符串。
编辑
我还有一个问题 花括号中有多个搜索字符串。我想用不同的模式替换每个子字符串。我该怎么办?
答案 0 :(得分: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)
编辑:使用替换函数替换每一次出现
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)
答案 1 :(得分:2)
不确定垃圾字符,但感兴趣的是re.sub('{.*}', 'frob', line)
出了什么问题?
答案 2 :(得分: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