Редактировать содержимое группы в регулярном выражении Python MatchObject - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть следующий (упрощенный) код - это суть того, что я хотел бы сделать

def replace_todo(m):
    m[2] = '*' if value else ' '
    return m.group()

Я хочу отредактировать определенную группу в объекте сопоставления, а затем отобразить все совпадение, включая отредактированную часть.

Функция replace_todo вызывается при каждом совпадении с помощью

myCompiledRegex.sub(replace_todo, text)

Текст, который используется в качестве ввода

[ ] mah lalalalalaa
[*] mah lalalalalaa

ожидаемый результат

[*] mah lalalalalaa
[*] mah lalalalalaa

регулярное выражение выглядит так

^(\[( |\*)]) ([a-z][a-z][a-z]) (.*)$

Но, похоже, мне не разрешено редактировать объект совпадения

Когда я пытаюсь выполнить приведенный выше код, я получаю следующую ошибку типа

_sre.SRE_Match' object does not support item assignment

Заранее спасибо:)

EDIT:

Используя решение spicavigo, при преобразовании списка в строку (str (groups)) это выглядит так

[u’[ ]’, '*’, u’jsp’, u’do something’]

вот так это должно выглядеть

[*] jsp do something

1 Ответ

2 голосов
/ 21 сентября 2011

Я новичок, когда дело доходит до регулярных выражений, но не могли бы вы сначала взять m.groups (), изменить то, что хотите, а затем вернуть переменную?

Скажи:

x=list(m.groups()) #NOTE: groups and not group
x[2] = '*' if value else ' '
return x

EDIT

Может быть, теперь я понимаю, что вы пытаетесь достичь. Как указано в комментарии ниже, вы можете изменить свое регулярное выражение на

'^(\[)( |\*)(]) ([a-z][a-z][a-z]) (.*)$'

Это в основном помогает присоединиться к списку m.groups ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...