Замените текст вокруг двух тегов в python на регулярное выражение - PullRequest
1 голос
/ 16 апреля 2020

Имеется строка:

#symbol 1# / 7 - #symbol 2#

Я хочу вернуть:

func('#symbol 1#') / 7 - func('#symbol 2#')

Я пробовал:

re.sub('[#*#]', 'func(\'', f2)

, что дает:

func(symbol 1func( / 7 - func(symbol 2func(

, где я не хочу func(' для второго га sh.

Есть ли способ заменить конец га sh на '), используя re.sub?

1 Ответ

3 голосов
/ 16 апреля 2020

Вы можете использовать регулярное выражение, например

#[^\s#](?:[^#]*[^\s#])?#

Заменить на func('\g<0>'), где \g<0> относится ко всему совпадению. См. regex demo .

Подробности

  • # - # char
  • [^\s#] - символ, отличный от пробела и #
  • (?:[^#]*[^\s#])? - необязательная группа без захвата, соответствующая 1 или 0 вхождениям
    • [^#]* - 0 или более символов, отличных от #
    • [^\s#] - символ, отличный от пробела, и #
  • # - # char.

См. Python демо :

import re
text = '#symbol 1# / 7 - #symbol 2#'
print( re.sub(r'#[^\s#](?:[^#]*[^\s#])?#', r"func('\g<0>')", text) )
# => func('#symbol 1#') / 7 - func('#symbol 2#')
...