webentwicklung-frage-antwort-db.com.de

Verwenden von regulären Ausdrücken zum Massenaustausch in Notepad ++ und Vim

Ich habe also eine große Textdatei, die wie folgt aussieht:

<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D

Es ist mehrere hundert Zeilen lang und ich möchte es wirklich nicht manuell machen. Der Ausdruck, den ich versuche zu verwenden, ist:

<option value='.{1,}' >

Was funktioniert wie beabsichtigt, wenn ich es durch mehrere Online-Tester für reguläre Ausdrücke laufen lasse. Ich möchte im Grunde alles vor A, B, C usw. entfernen. Das Problem ist, wenn ich diesen Ausdruck in Vim und Notepad ++ verwende, scheint er nichts zu finden.

31
Mike

Alles vor demA,B,Cusw.

Das scheint so einfach zu sein, dass ich Sie falsch interpretieren muss. Es ist nur

:%s/<.*>//
20
Whaledawg

In Notepad ++ müssen Sie hierfür keine regulären Ausdrücke verwenden.

Halten Sie die Alt-Taste gedrückt, um ein Textrechteck über mehrere Zeilen gleichzeitig auszuwählen. Wählen Sie den zu löschenden Block aus und drücken Sie die Löschtaste.

63
GlennS

In Notepad ++:

<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D


Find what: (.*)(>)(.)
Replace with: \3

Replace All


A
B
C
D
30
sdgfsdg

Es gibt eine sehr einfache Lösung, wenn ich das Problem nicht verstanden habe. Der folgende reguläre Ausdruck:

(.*)(>)(.*)

stimmt mit dem in Ihrem Beitrag angegebenen Muster überein.

In notepad ++ finden Sie also (.*)(>)(.*) und ersetzen es durch \3.

Die regulären Ausdrücke sind im Grunde gierig in dem Sinne, dass, wenn Sie (.*) angeben, sie mit der gesamten Zeile übereinstimmen. Hier habe ich genau das gleiche gemacht und es funktioniert gut in Notepad ++ und Editplus3.

8
andHapp

Es gibt zwei Probleme mit Ihrer ursprünglichen Lösung. Erstens, dein Beispieltext:

<option value value='1' >A

hat zwei Vorkommen des "Wert" -Wortes. Ihre Regex tut nicht. Außerdem müssen Sie die öffnende Klammer in dem Quantifizierer Ihres Regex deaktivieren, da Vim sie als wörtliche Klammer interpretiert. Diese Regex funktioniert:

:%s/<option value value='.\{1,}' >//g
7
rmeador

Dadurch wird das option-Tag entfernt und die Buchstaben bleiben in vim:

:%s/<option.*>//g
6
xsl

Es kann hilfreich sein, wenn Sie weniger spezifisch sind. Ihr Ausdruck dort ist "gierig", was von verschiedenen Programmen unterschiedlich interpretiert werden kann. Versuchen Sie dies in vim:

%s/^<[^>]+>//
4
Lucas Oman

In vim

:%s/<option value='.\{1,}' >//

oder

:%s/<option value='.\+' >//

In vim regulären Ausdrücken müssen Sie das Ein-oder-Mehr-Symbol, die Klammern, die geschränkten geschweiften Klammern und einige andere einschließen.

Unter :help /magic erfahren Sie, welche Sonderzeichen mit Escapezeichen versehen werden müssen (und wie Sie dies ändern können).

3
rampion

In Notepad ++

Suche

(<option value="\w\w">)\w+">(.+)

Ersetzen mit

\1\2
3

Ich hatte das gleiche Problem (mit jQuery "done ..." -Strings), aber nur in Notepad ++, habe ich gute, freundliche Antworten erhalten (die mich verstanden haben, was ich vermisst hatte) -Step-Erklärung, siehe Zeilenanfang mit regulären Ausdrücken in Notepad ++ finden

Versailles, Di 27 Apr 2010 22:53:25 +0200

2
Michel Merlin

Notepad ++: Suchmodus = regulärer Ausdruck

Finden Sie was: (. *>) (.)

Ersetzen durch:\2

2
Vuttipong L.

Etwas später, aber für den Fall, dass es für jedermann nützlich ist, konnte ich einem der Beispiele hier (von sdgfsdg) folgen und schnell reguläre Ausdrücke für Notepad ++ finden.

Ich musste ebenfalls einige redundante Daten aus einer Liste von HTML-Auswahl-Dropdown-Optionen des Formulars herausholen:

<select>
  <option value="AC">saint_helena">Ascension Island</option>
  <option value="AD">andorra">Andorra</option>
  <option value="AE">united_arab_emirates">United Arab Emirates</option>
  <option value="AF">afghanistan">Afghanistan</option>:
  ...
</select>

Und was ich wirklich wollte, war:

<select>
  <option value="AC">Ascension Island</option>
  <option value="AD">Andorra</option>
  <option value="AE">United Arab Emirates</option>
  <option value="AF">Afghanistan</option>
  ...
</select>

Nach einigem Haareschneiden wurde mir klar, dass die regulären Ausdrücke ab Version 5.8.5 (September 2010) immer noch bestimmte Schleifen in den Ausdrücken nicht zulassen (es sei denn, es gibt eine andere Syntax) "> united_arab_emirated_emirates"> trotz seiner zusätzlichen Trennzeichen:

(">)([a-z]+([_]*[a-z]*)*)(">)

Diese Abfrage funktionierte in den meisten generischen RegEx-Werkzeugen , aber während ich mich in Notepad ++ befand, musste ich die maximale Anzahl von geschachtelten Unterstrichen (die leider 8 waren) von Hand berücksichtigen, wobei ich das viel hässlichere verwendete:

(">)([a-z]+[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*)[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*(">)

Wenn jemand eine Möglichkeit kennt, eine Regex-Schleife in Notepad ++ zu ersetzen, lassen Sie es mich wissen.


Find what: * (">) ([az] + [_] [az] [_] [az] [_] [az] [_] [az]) [_] [az] [_] [az] [_] [az] [_] [az] (">) *


Ersetzen durch: _ ​​">


Ergebnis: _ ​​255 Vorkommen wurden ersetzt.

1
bcmoney

Das wird funktionieren. Ich habe es in meiner Vim getestet. Die einfachen Anführungszeichen sind das Problem.

1,$s/^<option value value=['].['] >/
1
J.J.

Hier ist ein schöner Artikel zu Notepad ++ - Reguläre Ausdrücke
http://markantoniou.blogspot.com/2008/06/notepad-how-to-use-regular-expressions.html

1
crowne

Vim:

:% s /.*> //

1
akr

Ganz einfach nur finden:

<option value value=.*?>

und klicken Sie auf Ersetzen

0
Ibrahim Akbar