У меня есть таблица стилей CSS, на которой я хочу провести некоторый анализ, и было неплохо использовать регулярные выражения в Notepad++. Теперь я обнаружил, что не могу написать регулярное выражение, и, может быть, это не была хорошая идея, но, плохая идея или нет, я хочу знать, как это сделать.
У меня есть автоматически сгенерированный набор стилей, помеченный (в основном) от block_1 до block_149. Сначала я хочу извлечь только информацию о настройках полей каждого стиля, поскольку это является одним из основных отличий. Некоторые из них правдоподобны, особенно ранние для заголовков и т.д., Но более поздние, по-видимому, отражают сложные вычисления исходного документа Word. Вы можете увидеть оба примера ниже:
[Примечание: я добавил 2 пробела в конце каждой строки, чтобы они правильно отображались здесь - эти пробелы не существуют в исходном коде. Однако исходный код (импортированный из Sigil) имеет дополнительный пробел в начале каждой строки - я не уверен, будет ли он получаться в виде пробелов или символа табуляции - я пытался использовать индикатор пробелов для все варианты.]
.block_8 {
background-color: #FFF;
display: block;
font-family: "Calibri", sans-serif;
font-size: 1.125em;
font-weight: bold;
line-height: 1.2;
page-break-after: avoid;
text-align: center;
padding: 0;
margin: 0 2.25pt 0 0
}
.block_9 {
border-bottom: 0;
border-top: 0;
display: block;
line-height: 1.2;
text-indent: 1.5em;
padding: 0;
margin: 0.3em 0
}
.block_10 {
background-color: #FFF;
border-bottom: 0;
border-top: 0;
display: block;
font-family: serif;
font-size: 0.75em;
line-height: 12.2pt;
text-indent: 1.5em;
padding: 0;
margin: 0.3em 0
}
...
.block_113 {
background-color: #FFF;
border-bottom: 0;
border-top: 0;
display: block;
letter-spacing: -0.1pt;
line-height: 1.2;
text-indent: 1.5em;
padding: 0;
margin: 0.3em 0 0.3em 16.1pt
}
.block_114 {
background-color: #FFF;
border-bottom: 0;
border-top: 0;
display: block;
font-family: serif;
font-size: 0.75em;
text-indent: 1.5em;
padding: 0;
margin: 0.3em 0.5pt 0.3em 0.7pt
}
Есть и другие отличия, и даже более поздние, только для основного текста, имеют разное количество записей.
То, что я хотел бы сделать, это иметь регулярное выражение, которое я мог бы использовать в первом случае, чтобы уменьшить каждую из этих записей только до: Block_(number) margin: (settings)
Я думал о том, чтобы извлечь различные настройки полей (T, R, B, L), но так как источник может включать в себя 1,2,3 или 4 параметра, сортировка этих правил с помощью регулярных выражений выходит за рамки моих амбиций. Я использовал regex101.com, чтобы попытаться уйти от очень простого распознавания, используя только настройки полей, но мне удалось включить все (переменное число) дополнительных строк между номером блока и настройками полей, что поставило меня в тупик. В идеале я хотел бы иметь возможность использовать подобную технику регулярных выражений для извлечения других настроек позже. Я также хотел бы иметь возможность справляться с переменным количеством пробелов и / или вкладок в макете.
Может кто-нибудь сказать мне, как это сделать? Дошло до того, что я почти наверняка смогу быстрее выполнять основные операции вырезания и вставки, но теперь я хочу знать, как сделать регулярное выражение в то время, когда оно может понадобиться для другого проекта.
EtA: у меня теперь есть код, который будет делать то, что я просил, и теперь хочу больше! Настройки, которые я хотел, оказались последними в блоке - предположим, что я хотел выбрать настройки высоты строки и изолировать их аналогичным способом - в качестве альтернативы настройкам полей?