Я единственный, кто не понял, чего хочет Леннид в первом примере?
Теперь для этого
ввод
Season 1
Episode 1
Episode 2
Episode 3
выход
<episodeslist>
<episode season="1" episode="1">
<episode season="1" episode="2">
при условии, что вы используете многострочный инструмент регулярных выражений
задвижка
/Season[^0-9]*([0-9]+)[^\n]*[\s]+Episode[^0-9]*([0-9]+)\n/gs
добавьте столько [\s]+Episode[^0-9]*([0-9]+)\n
, сколько нужно
возврат
<list>
<episode season=$1 episode=$2>
<episode season=$1 episode=$3>
<episode season=$1 episode=$4>
<episode season=$1 episode=$5>
просто не уверен насчет [^ \ n], используйте [^ E], если ввод действительно чистый
Если количество эпизодов варьируется от 24 до 26, просто запустите 3 регулярное выражение
Если вам нужно что-то более гибкое, вам понадобится мощное приложение, такое как GREP для Linux, или несколько клонов с пользовательским интерфейсом для других ОС, которые могут выполнять «regex inside regex»
Если на некотором скриптовом языке выполняются функции регулярных выражений, вы можете легко обернуть следующее в цикл, пока input больше не будет совпадать с чем-либо
{
1 - Match only `Season[^0-9]*([0-9]+)`, strip if off the input, store the season # in a variable,
2 - Match a block of episodes `([\s]+Episode[^0-9]*[0-9]+\n)+`
3 - Then inside that block match single lines `[\s]+Episode[^0-9]*[0-9]+`
4 - Using the season variable, output the appropriate XML
}