Regex: Remove every two or more spaces between specific tags and leave just a space instead

I want to remove every two or more spaces between specific tags and leave just a space instead:

For example:

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

My desire output:

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

I tried something but it did not work

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


Solution 1:

This removes 2 or more spaces only inside <p class="text_obisnuit"> and </p> and keep any other multiple spaces.

  • Ctrl+H
  • Find what: (?:<p class="text_obisnuit">|\G)(?:(?!</p>).)*?\s\K\s+
  • Replace with: LEAVE EMPTY
  • check Wrap around
  • check Regular expression
  • DO NOT CHECK . matches newline depending if you want to match multiple lines or not.
  • Replace all

Explanation:

(?:                         # 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

Given 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

Result for given example:

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

Note: it keeps space just after <p...> and just before </p>


If you want to remove these spaces, you have to run another regex:

  • Ctrl+H
  • Find what: (?<=<p class="text_obisnuit">)\s+|\s+(?=</p>)
  • Replace with: LEAVE EMPTY
  • UNcheck Match case
  • check Wrap around
  • check Regular expression
  • Replace all

Explanation:

(?<=                        # 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

Result for given example:

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