1

Я хочу удалить каждые два или более пробелов между определенными тегами и оставить вместо них только пробел:

Например:

<p class="text_obisnuit"> The context of articles, stories, and conversations helps you figure out and understand the meaning of English words in the text that are new to you. </p>

Мое желание вывода:

<p class="text_obisnuit">The context of articles, stories, and conversations helps you figure out and understand the meaning of English words in the text that are new to you.</p>

Я пробовал что-то, но это не сработало

(?<=<p class="text_obisnuit">)\s*|\s*(?=</p>)

3 ответа3

1

Это удаляет 2 или более пробелов только внутри <p class="text_obisnuit"> и </p> и сохраняет любые другие множественные пробелы.

  • Ctrl+H
  • Найти что: (?:<p class="text_obisnuit">|\G)(?:(?!</p>).)*?\s\K\s+
  • Заменить на: LEAVE EMPTY
  • проверить обернуть
  • проверьте регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline строке в зависимости от того, хотите ли вы соответствовать нескольким строкам или нет.
  • Заменить все

Объяснение:

(?:                         # start non capture group
  <p class="text_obisnuit"> # literally
 |                          # OR
  \G                        # restart from position of last match
)                           # end group
(?:                         # start non capture group
  (?!</p>)                  # negative lookahead, make sure we haven't reach </p>
  .                         # any character
)*?                         # group may appear 0 or more times, not greedy
\s                          # a space
\K                          # forget all we have seen until this position
\s+                         # 1 or more spaces

Данный текст:

other     text

<p class="text_obisnuit">  The context of articles,   stories, and conversations helps you     figure out and understand the meaning   of English words in the text that are new to you.   </p>

other    text

Результат для данного примера:

other     text

<p class="text_obisnuit"> The context of articles, stories, and conversations helps you figure out and understand the meaning of English words in the text that are new to you. </p>

other    text

Примечание: он сохраняет пространство сразу после <p...> и непосредственно перед </p>


Если вы хотите удалить эти пробелы, вам нужно запустить другое регулярное выражение:

  • Ctrl+H
  • Найти что: (?<=<p class="text_obisnuit">)\s+|\s+(?=</p>)
  • Заменить на: LEAVE EMPTY
  • UNcheck Match case
  • проверить обернуть
  • проверьте регулярное выражение
  • Заменить все

Объяснение:

(?<=                        # start positive lookbehind, make sure we have 
  <p class="text_obisnuit"> # literally
)                           # end lookbehind
\s+                         # 1 or more spaces
|                           # OR
\s+                         # 1 or more spaces
(?=                         # start positive lookahead
  </p>                      # literally
)                           # end lookahead

Результат для данного примера:

other     text

<p class="text_obisnuit">The context of articles, stories, and conversations helps you figure out and understand the meaning of English words in the text that are new to you.</p>

other    text
0

НАЙТИ РЕШЕНИЕ:

ПОИСК:

(?s)(\G|<p class="text_obisnuit">)((?!</p>).)*?\K((?<=>)\h+|\h+(?=<|\h))

ЗАМЕНИТЬ НА:

(leave empty)

0

HTML вообще не заботится о пробелах. Если вы покажете свой HTML, вы увидите, что пробелы исчезли.

Я создал для вас JSFiddle для тестирования.

Гораздо более простое решение - просто заменить два пробела на один и повторить столько раз, сколько возможно, но пробелы действительно не важны, если только в предварительно отформатированном тексте, который использует <pre> Tag.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .