Что нового

Как найти часть текста, находящийся между известных фраз

Вовчик55

Новичок
Сообщения
57
Репутация
0
Подскажите как из всего текста найти и показать лишь тот текст, который находится например между Текст2 и Текст4 а остальной текст отсеять
Текст1 Текст2 Текст3 Текст4 Текст(n)
Ну например:
"Меня четырежды останавливал патруль его величества короля Арканарского, и я дважды дрался с какими-то хамами. — Он изящно поднял левую руку, обмотанную окровавленной тряпкой. — Кстати, благородные доны, чей это вертолет позади избы?
— Это мой вертолет, — сварливо сказал дон Кондор. — У меня нет времени для драк на дорогах."
Как найти фразу, зная что она находится точно между фразой "благородные доны," и "позади избы?". То что искомый текст это чей это вертолет - допустим заранее неизвестно, известно лишь что этот текст между каких-то фраз
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Например:
Код:
#include <String.au3>
$sVar1 ="Меня четырежды останавливал патруль его величества короля Арканарского, "& _
	  "и я дважды дрался с какими-то хамами. — Он изящно поднял левую руку, "& _
	  "обмотанную окровавленной тряпкой. — Кстати, благородные доны, чей это вертолет позади избы?"& _
	  "— Это мой вертолет, — сварливо сказал дон Кондор. — У меня нет времени для драк на дорогах."
MsgBox(0, "Исходный текст", $sVar1)
$aVar2 = _StringBetween($sVar1, "благородные доны, ", " позади избы?")
If @error Then
   MsgBox(48, "Ошибка", "Текст не найден")
Else   
   MsgBox(64, "Искомый текст", $aVar2[0])
EndIf

Чуть подправил. Добавил проверку на ошибку.
Ой. Это же раздел "Регулярные выражения", а мой пример не подходит.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
если использовать регулярные выражения, то

Код:
$sVar1 ="Меня четырежды останавливал патруль его величества короля Арканарского, "& _
      "и я дважды дрался с какими-то хамами. — Он изящно поднял левую руку, "& _
      "обмотанную окровавленной тряпкой. — Кстати, благородные доны, чей это вертолет позади избы?"& _
      "— Это мой вертолет, — сварливо сказал дон Кондор. — У меня нет времени для драк на дорогах."
MsgBox(0, "Исходный текст", $sVar1)
$aVar2 = StringRegExp($sVar1, '(?<=благородные доны, ).*(?= позади избы?)', 1)
MsgBox(64, "Искомый текст", $aVar2[0])


Но мне больше нравится вариант Yuriy
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Yuriy [?]
Это же раздел "Регулярные выражения", а мой пример не подходит.
Почему? ИМХО, подходит.
Регулярные выражения и прочее
И еще вариант.
Код:
$sStr = 'Меня четырежды останавливал патруль его величества короля Арканарского, ' & _
		'и я дважды дрался с какими-то хамами. — Он изящно поднял левую руку, ' & _
		'обмотанную окровавленной тряпкой. — Кстати, благородные доны, чей это вертолет позади избы?' & _
		'— Это мой вертолет, — сварливо сказал дон Кондор. — У меня нет времени для драк на дорогах.'

$sStr = StringRegExpReplace($sStr, '(?s).*благородные доны,\h?(.*?)\h?позади избы\?.*', '$1')
ConsoleWrite(@extended & @TAB & $sStr & @LF)
 
Автор
Вовчик55

Вовчик55

Новичок
Сообщения
57
Репутация
0
Спасибо большое, пример Yuriy более простой, подходит как нельзя лучше :smile:
 
Верх