Sorry, das ist wahrscheinlich wirklich einfach. Aber wenn Sie in jeder Zeile ein Trennzeichen haben und den ganzen Text vor dem Trennzeichen in jeder Zeile suchen wollen, was würde dann mit regulärem Ausdruck geschehen? Ich weiß nicht, ob das Trennzeichen zählt, aber das Trennzeichen, das ich habe, ist das% -Zeichen.Wie finden Sie den gesamten Text bis zum ersten Zeichen x in einer Zeile?
Antwort
Ihr Text wird 1.
/^(.*?)%/
Hinweis in der Gruppe sein: Dies alles auf das Prozentzeichen erfassen wird. Wenn Sie einschränken möchten, was Sie erfassen, ersetzen Sie die. mit der escape sequence Ihrer Wahl.
Wie ich bereits erwähnt habe, ist Regex für dieses Problem nicht notwendig, aber das ist zumindest das Richtige :-). – Tom
Ich stimme zu, nur die Frage zu beantworten :-) Die meisten Sprachen haben etwas viel einfacher für solche einfachen Aufgaben. –
... wie Ihre Antwort deutlich zeigt. –
Sie müssen Regex nicht verwenden, wenn Sie nicht möchten. Abhängig von der Sprache, die Sie verwenden, wird es eine Art von String-Funktion wie Split() geben.
$str = "sometext%some_other_text";
$s = explode("%",$str,2);
print $s[0];
dies in PHP ist, spaltete es auf% und dann das erste Element des zurückgegebenen Arrays erhalten. ähnlich auch in anderen Sprachen mit Splitting-Methoden.
Obwohl dies wahrscheinlich kein großes Problem wäre, werde ich es noch einmal erwähnen, so ist es in diesem Post. "explodieren" ist ein bisschen unnötig, da es sich um die ganze Zeichenfolge handelt.Es erstellt auch eine Liste (und zusätzliche String-Objekte). Substringing ist konzeptionell einfacher und schneller, da es nicht erforderlich ist, den gesamten String zu betrachten. (Um das erste Vorkommen eines Trennzeichens zu finden, muss nicht die gesamte Zeichenkette betrachtet werden). – Tom
Was ist, wenn der Teilstring, den Sie suchen, so nahe am Ende ist? das betrachtet auch die ganze Saite. "substringing" beinhaltet 2 Schritte, einen, um den Index zu finden, zweitens den Teilstring. Beides beinhaltet den Aufruf von 2 Funktionen. Ist das schneller als das Aufrufen von Elementen im Speicher (dh Array)? Hast du eine Möglichkeit, diese beiden Methoden zu vergleichen, um mich zu überzeugen, was du sagst? :) – ghostdog74
In Python können Sie verwenden:
def GetStuffBeforeDelimeter(str, delim):
return str[:str.find(delim)]
In Java:
public String getStuffBeforeDelimiter(String str, String delim) {
return str.substring(0, str.indexOf(delim));
}
In C++ (ungetestet):
using namespace std;
string GetStuffBeforeDelimiter(const string& str, const string& delim) {
return str.substr(0, str.find(delim));
}
In all den obigen Beispielen Sie wollen behandeln Sie Eckkästen, wie Ihre Schnur, die den Begrenzer nicht enthält.
Grundsätzlich würde ich substring für etwas so einfach verwenden, weil Sie vermeiden können, die gesamte Zeichenfolge zu scannen. Regex ist Overkill, und "Explodieren" oder Splitting auf dem Delimeter ist auch nicht notwendig, weil es auf die gesamte Zeichenfolge schaut.
natürlich überlasse ich dem Leser die Fehlerbehandlung als Übung, aber das ist die Idee :-). – Tom
substring schaut auf die ganze Zeichenfolge auch richtig? Sie müssen find() (in Python) oder indexOf (in Java) verwenden, um den Index zu finden. – ghostdog74
@ ghostdob74: Teilstring muss nicht die ganze Zeichenfolge betrachten. Es kann nur den Teil betrachten, den du substringest. Außerdem muss index_of oder find nur bis zum ersten Auftreten des Delimeters scannen und dann aufhören ... es scannt nicht bis zum Ende, es sei denn, das Delimeter befindet sich am Ende oder nicht in der Zeichenfolge. – Tom
Sie sagen nicht, welchen Geschmack von Regex, also werde ich Perl-Notation verwenden.
/^[^%]*/m
Die ersten ^
ist ein Anfang anchor: in der Regel paßt es nur den Anfang der ganzen Reihe, aber diese regex ist in mehrzeiligen Modus dank die ‚m‘ modifier am Ende. [^%]
ist eine invertierte character class: Es entspricht einem beliebigen Zeichen außer einem '%'. Die *
ist eine quantifier, die bedeutet, dass die vorherige Sache ([^%]
in diesem Fall) null oder mehrere Male übereinstimmen.
- 1. Verstecken Sie den gesamten Text bis auf den ersten Buchstaben mit CSS?
- 2. finden Sie den gesamten Text vor der Verwendung von Regex
- 3. Vim - Löschen bis zum letzten Auftreten von Zeichen in Zeile
- 4. Laden Sie den gesamten Effekt des Storyboards bis zum Ende
- 5. Ersetzen Sie den gesamten Text mit Javascript
- 6. Geben Sie den ersten Buchstaben der Zeile in Datei
- 7. Holen Sie sich den ersten Datensatz bis zum letzten Datum
- 8. Bis zum Ende der Zeile Zeichen in Vi, hinter dem letzten Zeichen in der Zeile
- 9. den Text bis zum letzten Nummer Erhalten
- 10. Löschen Sie den gesamten Text unter einer Übereinstimmung - sed
- 11. Regex von Anfang der Zeile bis zum ersten Doppelpunkt
- 12. Verhindert, dass QTable den gesamten Text zum Bearbeiten auswählt
- 13. Regex Rückkehr nur Ziffern bis zu einer neuen Zeile Zeichen
- 14. regulären Ausdruck entsprechen den gesamten Text innerhalb von zwei Zeichen
- 15. Den ersten Punkt einer Zeichen-App zeichnen?
- 16. Wie liest man Datei von Zeile x bis zum Ende einer Datei in bash
- 17. bash ersetzen ersten Zeichen in jeder Zeile
- 18. Streifen Sie Text nach dem Komma bis zum Ende der Zeile
- 19. Löschen der ersten 'x' Zeichen aus jeder Zeile in einer Region mit Emacs
- 20. Wie liest man den gesamten Text aus einer byte [] Datei?
- 21. Sublime text 2 - Spalte auswählen bis zum Ende der Zeile
- 22. So finden Sie die Dimensionen von context.fillText (Text, x, y)
- 23. Wie fülle ich eine Zeile mit Zeichen x bis Spalte y mit Vim
- 24. Entfernen Sie Newline-Zeichen aus der ersten Zeile von NSString
- 25. Wie lösche ich den AFTER-Cursor sofort zum ersten Nicht-Whitespace-Zeichen in vim?
- 26. Zeile Nummerierung Auto-Füllung bis zum Ende
- 27. Extrahieren Sie den gesamten Text mit Zeichenfolgenpositionen aus einem PDF
- 28. Wie kann ich den gesamten Text vor der Übereinstimmung in einer Perl-Ersetzung ersetzen?
- 29. Extrahieren Sie die ersten 2 Zeichen in einer Zeichenfolge
- 30. Zeile X bis Zeile Y aus Datei in C++ lesen
Haben Sie weitere Kriterien für den Text oder wollen Sie einfach alles vor dem% packen? –
In welcher Sprache ist Ihr Projekt? Regex _might_ nicht der beste Weg, dies zu tun. – beggs
Das ist wirklich kein Regex-Problem ... Sie * können * sie verwenden, aber sehr unnötig. – Tom