в регулярном выражении Python matchobj, как сделать совпадение подстроки и назначить совпадение переменной?

1

Учитывая эту функцию re.sub и "replace" - спасибо, Ignacio, за указатель! - Я могу заменить все совпадения в моем очень длинном текстовом блобе со строкой ' * NONSENSE * ' - пока что так хорошо!

По пути я хотел бы найти подстроку в matchobj, называя ее " findkey ", поэтому я могу сделать дополнительную работу с ней...

Как это сделать?

data = re.sub('(:::[A-Z,a-z,:]+:::)', replace, data)

def replace(matchobj):
 if matchobj.group(0) != '':

  # this seems to work:
  tag = matchobj.group(1)

  # but this doesn't:
  findkey = re.search(':::([A-Z,a-z]+):::', tag)

  return '********************  NONSENSE  ********************'

 else:
  return ''
  • 1
    Этот код работает именно так, как я ожидаю. Что вы хотите, чтобы findkey содержал? Прямо сейчас он содержит объект соответствия.
  • 0
    Обратите внимание, что я пытаюсь использовать findkey для совпадения внутри тега. Это матч подгруппы, по сути.
Показать ещё 1 комментарий
Теги:

2 ответа

0
Лучший ответ

Попробуй это. Вы можете совместить внутреннюю часть как часть начального подзаголовка.

import re

data = ":::::::::::BLAH:::::::::, ::::::::MORE:::::::"

def replace(matchobj):
  # this seems to work:
  tag = matchobj.group(0)
  findkey = matchobj.group(1)

  print findkey

  return '********************  NONSENSE  ********************'


data = re.sub(r':::(?P<inner>[A-Z,a-z]+):::', replace, data)

print data

возвращает следующее

BLAH
MORE
::::::::********************  NONSENSE  ********************::::::, :::::********************  NONSENSE  ********************::::
  • 0
    спасибо, milkypostman - это действительно место в моем случае. Я пытался «втиснуть» мои концепции множественного соответствия шаблонов в код Python. Это был секретный соус.
0

Вы ищете

findkey = re.search(':::([A-Z,a-z]+):::', tag).group()

Обратите внимание на группу(), а также этот документ может помочь.

  • 0
    Вау! Спасибо Senthil, это было здорово - я не знал, как использовать метод group (). Теперь я могу видеть findkey в записи журнала, но теперь возникла новая проблема; не может использовать его как переменную, как в: result = plpy.execute(plan3, [ fieldid ] )
  • 0
    Я не получил эту часть. Вы не можете использовать строку в качестве переменной. Вы переменные только метки, вы можете назначить выходную строку для вашей переменной. НТН.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню