Nehmen wir an, ich möchte 10 Datenzeilen haben, aber ich möchte, dass ein Wert für jede Zeile oder jedes Datenelement erhöht wird. Wie erhöhe ich diesen Wert?
Zum Beispiel ... Wenn ich diese Zeilen habe, gibt es eine Regex-Möglichkeit, die ID-Werte zu ersetzen, um sie zu erhöhen?
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
--- Hier ist, wie es aussehen soll ... (wenn die ID der ersten Zeile nach oben geht, ist das in Ordnung)
<row id="1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5" />
regex
notepad++
sequential
Travyguy9
quelle
quelle
Antworten:
Ich bin mir bei Regex nicht sicher, aber es gibt eine Möglichkeit, dies in Notepad ++ zu tun, obwohl es nicht sehr flexibel ist.
Halten
Alt
Sie in dem von Ihnen angegebenen Beispiel die Spalte mit den Zahlen, die Sie ändern möchten , gedrückt und wählen Sie sie aus. Gehen Sie dann zuEdit->Column Editor
und wählen Sie dasNumber to Insert
Optionsfeld im angezeigten Fenster. Geben Sie dann Ihre Anfangsnummer und Ihr Inkrement an und klicken Sie auf OK. Es sollte die inkrementierten Zahlen ausschreiben.Hinweis: Dies funktioniert auch mit der
Multi-editing
Funktion (Auswahl mehrerer Positionen bei Ctrlgedrückter Taste).Dies ist jedoch nicht annähernd die Flexibilität, die die meisten Menschen für nützlich halten würden. Notepad ++ ist großartig, aber wenn Sie einen wirklich leistungsstarken Editor suchen, der solche Dinge problemlos ausführen kann, würde ich sagen, verwenden Sie Vim.
quelle
Ich habe heute nach der gleichen Funktion gesucht, konnte dies aber in Notepad ++ nicht tun. Wir haben jedoch TextPad zu unserer Rettung. Es hat bei mir funktioniert.
Aktivieren Sie im TextPad-Ersetzungsdialog den regulären Ausdruck. dann könnten Sie versuchen, zu ersetzen
<row id="1"/>
durch
<row id="\i"/>
Schauen Sie sich diesen Link an, um weitere erstaunliche Funktionen zum Ersetzen von TextPad zu finden - http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/
quelle
Ich hatte das gleiche Problem mit mehr als 250 Zeilen und hier ist, wie ich es gemacht habe:
zum Beispiel :
<row id="1" /> <row id="1" /> <row id="1" /> <row id="1" /> <row id="1" />
Sie setzen den Cursor direkt nach der "1" und klicken auf
alt + shift
und beginnen mit dem Abwärtspfeil abzusteigen, bis Sie die unterste Zeile erreichen. Jetzt sehen Sie eine Gruppe von Auswahlen. Klicken Sie auf Löschen, um die Nummer 1 in jeder Zeile gleichzeitig zu löschen, und gehen Sie zuEdit -> Column Editor
und wählen SieNumber to Insert
Geben Sie dann das1
Feld für die Anfangsnummer ein und1
erhöhen Sie es um das Feld. Überprüfen Sie die Nullzahlen und klicken Sie aufok
Herzlichen Glückwunsch, du hast es geschafft :)
quelle
Da es nur begrenzte reale Antworten gibt, werde ich diese Problemumgehung teilen. Für wirklich einfache Fälle wie Ihr Beispiel machen Sie es rückwärts ...
Davon
1 2 3 4 5
Ersetzen Sie
\r\n
durch" />\r\n<row id="
und Sie erhalten 90% des Weges dorthin1" /> <row id="2" /> <row id="3" /> <row id="4" /> <row id="5
Oder ist eine ähnliche Art und Weise, wie Sie Daten mit Excel / Tabellenkalkulation hacken können. Teilen Sie einfach Ihre Originaldaten in Spalten auf und bearbeiten Sie die Werte nach Bedarf.
| <row id=" | 1 | " /> | | <row id=" | 1 | " /> | | <row id=" | 1 | " /> | | <row id=" | 1 | " /> | | <row id=" | 1 | " /> |
Offensichtliche Dinge, aber es kann jemandem helfen, den einen oder anderen einmaligen Hack-Job zu erledigen, um ein paar Tastenanschläge zu sparen.
quelle
(.*)
mit<row id="\1" />
in regex Modus ohne. matches newline
erhalten Sie 100% der Art und Weise dorthin gelangen.http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text
Notepad ++ ist mit einem Editor "Bearbeiten -> Spalte" Alt + C "ausgestattet, mit dem eine rechteckige Auswahl auf zwei verschiedene Arten bearbeitet werden kann: Coledit.png fügt in jeder Zeile, einschließlich und nach der aktuellen Zeile, in der Spalte der Einfügung festen Text ein Punkt (auch bekannt als Caret). Der ursprünglich ausgewählte Text bleibt unberührt. Wie das Bild zeigt, kann auf die gleiche Weise eine lineare Reihe von Zahlen eingefügt werden. Startwert und Inkrement sind anzugeben. Das Auffüllen der linken Seite mit Nullen ist eine Option, und die Zahl kann in Basis 2, 8, 10 oder 16 eingegeben werden. Auf diese Weise werden auch die berechneten Werte angezeigt, wobei das Auffüllen auf dem größten basiert.
quelle
Die oben vorgeschlagenen Lösungen funktionieren nur, wenn die Daten ausgerichtet sind.
Siehe Lösung im Link mit dem PythonScript Notepad ++ - Plugin. Es funktioniert hervorragend!
Stackoverflow Suchen / Ersetzen, aber Wert erhöhen
quelle
(Posting für den Fall, dass jemand davon Gebrauch macht).
Ich suchte nach einer Lösung für ein Problem, das etwas ausgefeilter als OP ist - indem ich JEDES Auftreten von etwas mit der Nummer durch dasselbe durch eine inkrementierte Nummer ersetzte
ZB so etwas ersetzen:
<row id="1" /> <row id="2" /> <row id="1" /> <row id="3" /> <row id="1" />
Dadurch:
<row id="2" /> <row id="3" /> <row id="2" /> <row id="4" /> <row id="2" />
Konnte die Lösung nicht online finden, also habe ich mein eigenes Skript in groovig geschrieben (ein bisschen hässlich, macht aber den Job):
/** * <p> Finds words that matches template and increases them by 1. * '_' in word template represents number. * * <p> E.g. if template equals 'Row="_"', then: * ALL Row=0 will be replaced by Row="1" * All Row=1 will be replaced by Row="2" * <p> Warning - your find template might not work properly if _ is the last character of it * etc. * <p> Requirments: * - Original text does not contain tepmlate string * - Only numbers in non-disrupted sequence are incremented and replaced * (i.e. from example below, if Row=4 exists in original text, but Row=3 not, than Row=4 will NOT be * replaced by Row=5) */ def replace_inc(String text, int startingIndex, String findTemplate) { assert findTemplate.contains('_') : 'search template needs to contain "_" placeholder' assert !(findTemplate.replaceFirst('_','').contains('_')) : 'only one "_" placeholder is allowed' assert !text.contains('_____') : 'input text should not contain "______" (5 underscores)' while (true) { findString = findTemplate.replace("_",(startingIndex).toString()) if (!text.contains(findString)) break; replaceString = findTemplate.replace("_", "_____"+(++startingIndex).toString()) text = text.replaceAll(findString, replaceString) } return text.replaceAll("_____","") // get rid of '_____' character } // input findTemplate = 'Row="_"' path = /C:\TEMP\working_copy.txt/ startingIndex = 0 // do stuff f = new File(path) outText = replace_inc(f.text,startingIndex,findTemplate) println "Results \n: " + outText f.withWriter { out -> out.println outText } println "Results written to $f"
quelle
Sie können dies mit Powershell über Regex und Foreach-Schleife tun, wenn Sie Ihre Werte in der Datei input.txt speichern :
$initialNum=1; $increment=1; $tmp = Get-Content input.txt | foreach { $n = [regex]::match($_,'id="(\d+)"').groups[1 ].value; if ($n) {$_ -replace "$n", ([int32]$initialNum+$increment); $increment=$increment+1;} else {$_}; }
Danach können Sie $ tmp mit in der Datei speichern
$tmp > result.txt
. Dies erfordert keine Daten in Spalten.quelle