Скорее всего, мы можем начать с выражения, которое будет собирать новые строки:
.*(\[ ddf \]|\[ edf \])[\s\S]*?description4\s*
.*(\[ ddf \]|\[ edf \])[\s\S]*?\s*(?<=--------\[)
.*(\[ ddf \]|\[ edf \])[\s\S]*?\s*\n(?:-)
Если бы в описании 4 была фиксированная подстрока, мы можем просто использовать это, например:
.*(\[ ddf \]|\[ edf \])[\s\S]*?---\[ \?\?\?\? \]----.+\s*
.*(\[ .*abc.* \]|\[ .*cde \])[\s\S]*?\]----.+\s*
Edit:
Поскольку у нас есть динамические шаблоны, и они будут меняться в зависимости от наших входных данных, мы будем использовать только одно правило для каждого, получая неповторяющуюся уникальную подстроку в верхнем левом углу и неповторяющуюся уникальную подстроку из внизу справа, и мы разработали бы наше выражение, а затем соединили бы их, используя логические ИЛИ:
(.*(\[ .*系统概述.* \][\s\S]*?LapTop\s*)|(.*\[ AIDA64 Extreme \][\s\S]*?10:14\s*)|(.*\[ DMI \])[\s\S]*?HuronRiver CRB.+\s*)
(.*(\[ .*TOP LEFT.* \][\s\S]*?Bottom RIGHT.*\s*))|(.*(\[ .*TOP LEFT.* \][\s\S]*?Bottom RIGHT.*\s*))