Regex: Entfernen Sie alle zwei oder mehr Leerzeichen zwischen bestimmten Tags und lassen Sie stattdessen nur ein Leerzeichen

758
Just Me

Ich möchte alle zwei oder mehr Leerzeichen zwischen bestimmten Tags entfernen und stattdessen nur ein Leerzeichen lassen:

Zum Beispiel:

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

Meine Wunschausgabe:

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

Ich habe etwas versucht, aber es hat nicht funktioniert

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

1

3 Antworten auf die Frage

1
Toto

Dadurch werden 2 oder mehr Leerzeichen nur innerhalb von <p class="text_obisnuit"> und entfernt, </p>und alle anderen Leerzeichen bleiben erhalten.

  • Ctrl+H
  • Finde was: (?:<p class="text_obisnuit">|\G)(?:(?!</p>).)*?\s\K\s+
  • Ersetzen mit: LEAVE EMPTY
  • Aktivieren Sie die Option Wrap around
  • Überprüfen Sie den regulären Ausdruck
  • NICHT ÜBERPRÜFEN,. matches newline je nachdem, ob Sie mehrere Zeilen zuordnen möchten oder nicht.
  • Replace all

Erläuterung:

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

Gegebener 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 

Ergebnis für gegebenes Beispiel:

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 

Hinweis: Es bleibt Platz hinter <p...>und kurz davor</p>


Wenn Sie diese Leerzeichen entfernen möchten, müssen Sie eine weitere Regex ausführen:

  • Ctrl+H
  • Finde was: (?<=<p class="text_obisnuit">)\s+|\s+(?=</p>)
  • Ersetzen mit: LEAVE EMPTY
  • Deaktivieren Sie die Option "Groß- / Kleinschreibung"
  • Aktivieren Sie die Option Wrap around
  • Überprüfen Sie den regulären Ausdruck
  • Replace all

Erläuterung:

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

Ergebnis für gegebenes Beispiel:

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 
Hallo, Toto. Das war mein Problem, ich muss auch den Platz vorher und nachher entfernen

..

Just Me vor 6 Jahren 1
Toto - Ich konnte alles in der Mitte dieser Tags mit etwas wie `^ (

) \ K. * \ S . +? (? =

Ich war mir nicht sicher, ob Sie eine Idee haben, das besser zu machen und dann alle zwei oder mehr Leerzeichen durch nur diese Zeichen zu ersetzen. Pimp Juice IT vor 6 Jahren 0
@JustMe: Es ist nicht möglich, nur einen regulären Ausdruck auszuführen, da Sie 2 oder mehr Leerzeichen mit 1 Leerzeichen entfernen möchten. Dies ist der Fall für das linke Leerzeichen nach ``, dieser Regex ersetzt 2 oder mehr Leerzeichen durch 1 Leerzeichen. Sie müssen eine weitere Regex ausführen, siehe meine Bearbeitung. Toto vor 6 Jahren 0
@PimpJuiceIT: Die Ersetzung ist für das erste und letzte Leerzeichen nicht gleich, sie möchten sie vollständig entfernen, aber 1 Leerzeichen für andere Leerzeichen in der Mitte behalten. Ich denke, es ist mit einem einzelnen Regex nicht möglich (oder vielleicht wird es aber.) zu komplex!) Toto vor 6 Jahren 1
0
harrymc

HTML kümmert sich im Allgemeinen nicht um Leerzeichen. Wenn Sie Ihren HTML-Code anzeigen, werden Sie sehen, dass die Leerzeichen verschwunden sind.

Ich habe für Sie ein JSFiddle zum Testen erstellt.

Eine viel einfachere Lösung besteht darin, einfach zwei Leerzeichen durch ein einziges zu ersetzen und so oft wie möglich zu wiederholen, aber Leerzeichen sind wirklich unwichtig, es sei denn, in vorformatiertem Text wird der Text verwendet <pre> Tag.

hallo harrymc, es geht nicht um html, aber ich möchte in notepad ++ alles in ordnung sehen, kein chaos Just Me vor 6 Jahren 0
Bei sehr kompliziertem Regex laufen Sie Gefahr, den Text zu zerstören anstatt ihn zu verschönern. In Bezug auf Verschönerung: Haben Sie sich das XML Tools-Plugin angesehen? Vielleicht ist es besser als Regex, wenn Sie Ihren Text lesbar machen. Es funktioniert auch für HTML, nicht nur für XML. harrymc vor 6 Jahren 0
0
Just Me

FINDE DIE LÖSUNG:

SUCHE:

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

ERSETZT DURCH:

(leave empty)