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

382
Just Me

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

Например:

<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>)

1

3 ответа на вопрос

1
Toto

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

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

Объяснение:

(?: # 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
  • проверить обернуть
  • проверьте регулярное выражение
  • Replace all

Объяснение:

(?<= # 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 
Привет, Тото. Это была моя проблема, мне нужно удалить также пространство до и после

..

Just Me 5 лет назад 1
Toto - я смог получить все, чтобы выделить в середине этих тегов что-то вроде `^ (

) \ К. * \ С . + (? =

) `поэтому я не был уверен, есть ли у вас идея сделать это лучше, а затем заменить все 2 или более пробелов только теми символами внутри. Pimp Juice IT 5 лет назад 0
@JustMe: Невозможно сделать это только в одном регулярном выражении, потому что вы хотите удалить 2 или более пробелов с 1 пробелом, это относится к левому пробелу после ``, это регулярное выражение заменяет 2 или более пробела на 1 пробел. Вы должны запустить другое регулярное выражение, см. мое редактирование. Toto 5 лет назад 0
@PimpJuiceIT: замена не одинакова для первого и последнего пробелов, они хотят полностью удалить их, но оставляют 1 пробел для других пробелов посередине. Я думаю, что это невозможно с одним регулярным выражением (или, возможно, оно станет к сложному!) Toto 5 лет назад 1
0
harrymc

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

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

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

привет harrymc, речь идет не о HTML, но я хочу видеть все в порядке в блокноте ++, а не беспорядок Just Me 5 лет назад 0
С очень сложным регулярным выражением вы рискуете уничтожить текст, а не украсить его. Что касается украшения: вы смотрели на плагин XML Tools? Это может сделать лучше, чем регулярное выражение, чтобы сделать ваш текст читабельным. Это работает и для HTML, не только для XML. harrymc 5 лет назад 0
0
Just Me

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

ПОИСК:

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

ЗАМЕНИТЬ НА:

(leave empty)

Похожие вопросы