На самом деле вы можете использовать re.sub
для замены совпадений, и вы можете вызвать небольшую функцию, если ваша строка замены может отличаться в разных случаях.Например:
def replace_string(matchobj):
if len(matchobj.groups()) == 5:
if matchobj.group(5):
return "<a>"+matchobj.group(2)+"\n<div>"+matchobj.group(5)+"<br>"+matchobj.group(3)+"</div></a>"
else:
return "<a>"+matchobj.group(2)+"\n<div><br>"+matchobj.group(3)+"</div></a>"
else:
return ""
pattern = re.compile(r"\[\[((.*?)//)(.*?)(//(.*?))*\]\]")
print re.sub(pattern, replace_string, answer_string)
Теперь это быстро и грязно, но идея в том, что re.sub
найдет и заменит все совпадения.Я изменил шаблон, чтобы добавить круглые скобки, которые заставляют Python 'захватывать' совпадения в groups()
объекта сопоставления.Таким образом, на основе добавленной скобки, есть 5 групп захвата.Я думаю, что будет 5 групп захвата каждый раз, когда это выражение совпадает, но если что-то не совпадает, захваченная группа будет None
.
Когда происходит замена, она вызывает функцию replace_string
,и код решает, что возвращать, основываясь на том, является ли 5-я группа None
.Это случится, если пропустить часть //description
.Я не уверен, если проверка для 5 групп необходима, но хотел быть уверен.
В любом случае, я думаю, это должно, по крайней мере, указать вам полезное направление.