Использование регулярных выражений для выделения соответствующей части длинного заголовка

#python #regex #string #3d #render

#python #регулярное выражение #строка #3D #визуализация

Вопрос:

ЗАГОЛОВОК = MANTRA (IFD amp; RENDER): mh 104_IJ_5070_Fireworks_residualSmoke_v3 (/obj/FX_jet_contrails/_RENDER/smokeResidual_Beauty) (Frames: 1001-1151)

Я хочу изолировать «mh 104_IJ_5070_FireWorks_residualSmoke_v3» часть этого заголовка, используя регулярное выражение, но я изо всех сил пытаюсь найти чистый способ сделать это.

Есть идеи?

Python 2.7 пожалуйста

Комментарии:

1. Итак, я бы посоветовал привести больше примеров заголовков. Всегда ли будут заголовки, за которыми следует 2 characters отдельный идентификатор? _

2. РЕНДЕРИНГ KATANA: abr char_nasr_main_lookdev_v002 (Слои: turntable_head) (Кадры: 1001-1200) (Время: ~ 30 мин) (Tpl: v004)

3. РЕНДЕРИНГ SHOTBOT KATANA: abr MC0825_main_layout_v001 (Слои: bty_grey_qc) (Кадры: 1001-1185) (Время: ~ 15 мин) (Tpl: v005)

4. ОТРИСОВКА СООТВЕТСТВИЯ: abr MS0255_main_matchmation_v001 (Слои: выходные данные) (кадры: 1001-1052)

Ответ №1:

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

Лично я бы избегал регулярных выражений, если вы можете помочь этому — они просто создают много ошибок.

Попробуйте:

  " ".join(str.split()[6:8])
  

Разделите строку на слова, а затем возьмите 6-е и 7-е слова и соедините их обратно.

Если вы действительно хотите использовать regexp

 import re
r = "TITLE = (?P<title>.*): (?P<data>.*) ((?P<path>.*)) (Frames: (?P<frame>.*))"
m = re.match(r, str)
m.groupdict()

{'path': '/obj/FX_jet_contrails/_RENDER/smokeResidual_Beauty', 'frame': '1001-1151', 'data': 'mh 104_IJ_5070_Fireworks_residualSmoke_v3', 'title': 'MANTRA (IFD amp; RENDER)'}
  

Комментарии:

1. У меня не работает, потому что это инструмент, который будет анализировать тонны разных заголовков, он не всегда выглядит так. Но я всегда пытаюсь изолировать информацию, разделенную _, поэтому потребуется регулярное выражение.

2. Добавлено регулярное выражение — но все зависит от того, что меняется, а что остается неизменным, и какие биты вас интересуют.

Ответ №2:

Предполагая, что первая часть заголовка MANTRA (IFD amp; RENDER): не изменяется и что две части, которые вы хотите извлечь, не содержат пробелов, должно сработать следующее:

 import re
title = "MANTRA (IFD amp; RENDER): mh 104_IJ_5070_Fireworks_residualSmoke_v3 (/obj/FX_jet_contrails/_RENDER/smokeResidual_Beauty) (Frames: 1001-1151)"
substring = re.search(r": (S  S )", v).group(1)
print(substring)
  

Выдает:

 'mh 104_IJ_5070_Fireworks_residualSmoke_v3'
  

Это эффективно захватывает все после первого двоеточия пробела : и захватывает первые две части символов, не содержащих пробелов.