Ersetzen Sie jede n-te Instanz eines Zeichens durch eine neue Zeile in Notepad ++

15985
Pieter van Niekerk

Ich habe eine durch Pfeife begrenzte Reihe von NAME|VALUEPaaren, die so aussehen.

Name1|Value1|Name2|Value2|Name3|Value3 

Ich möchte jede zweite Instanz |durch eine neue Zeile ersetzen, damit ich so etwas habe.

Name1|Value1 Name2|Value2 Name3|Value3 

Mein Problem ist nicht die New-Line, da ich weiß, dass ich dafür verwenden kann \r\n, sondern eher den Regex-Teil, der nur jede zweite Instanz von |.

5

2 Antworten auf die Frage

9
Máté Juhász

Suchen: ([^\|]*\|[^\|]*)\|
Ersetzen in:\1\n

Das geht nicht. DavidPostill vor 8 Jahren 1
Ich habe es versucht, aber dies fügt nur eine neue Zeile hinzu, ohne die Zeichenfolge an den `|` s aufzuteilen Pieter van Niekerk vor 8 Jahren 1
Ich habe es korrigiert und ausprobiert, es funktioniert jetzt bei mir. Entschuldigung für die vorherige Version. Máté Juhász vor 8 Jahren 0
@nixda: Es hat auch vor Ihrer Korrektur für mich funktioniert, `|` ist in dieser Situation kein Sonderzeichen, es muss nicht entkommen werden Máté Juhász vor 8 Jahren 0
In meiner Notepad-Version (6.6.9) müssen sie maskiert werden. Ich weiß nicht was ich sagen soll. Es funktioniert einfach nicht ohne nixda vor 8 Jahren 0
Ok, ich habe `\` wieder hinzugefügt, danke für die Verbesserung! (meine Version ist 5.9, viel älter als Ihre) Máté Juhász vor 8 Jahren 0
Sie haben sich unter der Motorhaube ihres Regex-Scintilla-Motors stark verändert. Ich glaube, es war irgendwo um Version 6.3 nixda vor 8 Jahren 0
Es funktioniert immer noch nicht (zumindest unter Windows) http://imgur.com/rYcrcG9 DavidPostill vor 8 Jahren 0
es funktioniert für mich (Windows 7, notepad ++ 5.9) und funktioniert auch für Nixda. Einfach nur seltsam Máté Juhász vor 8 Jahren 0
Wenn Sie nach einer Vorgehensweise in Sublime suchen, funktioniert das oben auch, wenn Sie den regulären Ausdruck in "Ersetzen ..." aktivieren (dies ist die Schaltfläche mit ". *"). 8bitme vor 8 Jahren 0
3
DavidPostill

I want to replace every second instance of | with a new line

  • Menu "Search" > "Replace" (or Ctrl + H)

  • Set "Find what" to (.*?\|.*?)[\|]

  • Set "Replace with" to \1\r\n

  • Enable "Regular expression"

  • Click "Replace All"

    enter image description here

Before:

Name1|Value1|Name2|Value2|Name3|Value3 

After:

Name1|Value1 Name2|Value2 Name3|Value3 

Notes:

  • The above assumes you are editing a text file with Windows EOLs, \r\n.

  • If you are using files with different EOLs you can convert them to Windows EOLs using Menu "Edit" > "EOL Conversion".

  • If you aren't working with Windows EOL, and you don't wish to convert them, use the following instead:

    • Use \n instead of \r\n for Unix/OS X EOLs

    • Use \r instead of \r\n for Mac OS (up to version 9) EOLs


Further reading

Der bereitgestellte Regex ist ziemlich fragwürdig: Das erste `. *?` Wird als nicht gieriges Spiel niemals mit irgendetwas übereinstimmen, da es nichts zu seiner Linken gibt, um es zu verankern. Es wird effektiv zum No-Op. Bob vor 6 Jahren 0