Ich habe eine Zeichenfolge wie:
"super exemple of string key : text I want to keep - end of my string"
Ich möchte nur die Zeichenfolge behalten, die zwischen "key : "
und liegt " - "
. Wie kann ich das machen? Muss ich einen Regex verwenden oder kann ich es auf andere Weise tun?
substring
undindexof
Antworten:
Vielleicht ist ein guter Weg, nur einen Teilstring auszuschneiden :
quelle
oder mit nur String-Operationen
quelle
Sie können es ohne Regex tun
quelle
Je nachdem, wie robust / flexibel Ihre Implementierung sein soll, kann dies tatsächlich etwas schwierig sein. Hier ist die Implementierung, die ich verwende:
quelle
InvariantCulture
funktioniert nicht mit Windows Universal Apps. Gibt es eine Möglichkeit, es zu entfernen, indem die Funktionalität Ihrer Klasse beibehalten wird? @ChaseMedallionHier ist der Weg, wie ich das machen kann
quelle
Ich denke das funktioniert:
quelle
Regex ist hier übertrieben.
Sie könnten verwenden
string.Split
mit der Überlastung , die eine nimmtstring[]
für die Trennzeichen , aber das wäre auch sein übertrieben.Schauen Sie sich
Substring
undIndexOf
- erstere an, um Teile einer Zeichenfolge und einen Index sowie eine Länge zu erhalten, und die zweite, um indizierte innere Zeichenfolgen / Zeichen zu finden.quelle
string.Split
.Eine funktionierende LINQ-Lösung:
quelle
quelle
Da das
:
und das-
einzigartig sind, können Sie Folgendes verwenden:quelle
oder mit einem regulären Ausdruck.
mit einem laufenden Beispiel .
Sie können entscheiden, ob es übertrieben ist.
oder
als untervalidierte Erweiterungsmethode
quelle
Dies gibt nur die Werte zwischen "key:" und dem folgenden Vorkommen von "-" zurück.
quelle
Sie können die folgende Erweiterungsmethode verwenden:
Verwendung ist:
quelle
Ich habe das Code-Snippet von Vijay Singh Rana verwendet, das im Grunde den Job macht. Aber es verursacht Probleme, wenn das
firstString
bereits das enthältlastString
. Ich wollte ein access_token aus einer JSON-Antwort extrahieren (kein JSON-Parser geladen). MeinfirstString
war\"access_token\": \"
und meinlastString
war\"
. Am Ende hatte ich eine kleine Modifikationquelle
Wenn Sie nach einer 1-Zeilen-Lösung suchen, ist dies:
Die gesamte 1-Zeilen-Lösung mit
System.Linq
:quelle
Sie haben bereits einige gute Antworten und mir ist klar, dass der von mir bereitgestellte Code bei weitem nicht der effizienteste und sauberste ist. Ich dachte jedoch, dass es für Bildungszwecke nützlich sein könnte. Wir können den ganzen Tag vorgefertigte Klassen und Bibliotheken verwenden. Aber ohne das Innenleben zu verstehen, ahmen wir einfach nach und wiederholen es und werden nie etwas lernen. Dieser Code funktioniert und ist grundlegender oder "jungfräulicher" als einige der anderen:
Am Ende wird der Variablen parsedString die gewünschte Zeichenfolge zugewiesen. Beachten Sie, dass auch fortlaufende und vorhergehende Leerzeichen erfasst werden. Denken Sie daran, dass eine Zeichenfolge einfach ein Array von Zeichen ist, die wie andere Arrays mit Indizes usw. bearbeitet werden können.
Pass auf.
quelle
Wenn Sie mehrere Vorkommen von Teilzeichenfolgenpaaren behandeln möchten, ist dies ohne RegEx nicht einfach:
Wenn die Anzahl der Reihenfolge und das Auftreten von Teilzeichenfolgen keine Rolle spielt, kann diese schnelle und schmutzige Option eine Option sein:
Zumindest werden die meisten Ausnahmen vermieden, indem die ursprüngliche Zeichenfolge zurückgegeben wird, wenn keine / einzelne Teilzeichenfolge übereinstimmt.
quelle
Wie ich immer sage, ist nichts unmöglich:
Hoffe, dass ich geholfen habe.
quelle
So etwas vielleicht
quelle
Wenn Fragen anhand eines einzelnen Beispiels gestellt werden, sind zwangsläufig Mehrdeutigkeiten vorhanden. Diese Frage ist keine Ausnahme.
Für das in der Frage angegebene Beispiel ist die gewünschte Zeichenfolge klar:
Diese Zeichenfolge ist jedoch nur ein Beispiel für Zeichenfolgen und Grenzzeichenfolgen, für die bestimmte Teilzeichenfolgen identifiziert werden sollen. Ich werde eine generische Zeichenfolge mit generischen Grenzzeichenfolgen betrachten, die wie folgt dargestellt werden.
PP
ist die vorhergehende Zeichenfolge ,FF
ist die folgende Zeichenfolge und die Partyhüte geben an, welche Teilzeichenfolgen abgeglichen werden sollen. (In dem in der Frage angegebenen Beispielkey :
handelt es sich um die vorhergehende Zeichenfolge und-
die folgende Zeichenfolge.) Ich habe angenommen, dassPP
undFF
vor und nach Wortgrenzen (so dassPPA
undFF8
nicht übereinstimmen).Meine Annahmen, die sich in den Partyhüten widerspiegeln, lauten wie folgt:
PP
kann ein (oder mehrere) vorangestellt sein.FF
Teilstrings , die, falls vorhanden, nicht berücksichtigt werden.PP
ein oder mehrerePP
s folgen, bevorFF
Folgendes auftrittPP
s Teil der Teilzeichenfolge zwischen den vorhergehenden und folgenden Zeichenfolgen.PP
ein oder mehrereFF
s folgenPP
, wird die ersteFF
FolgePP
als die folgende Zeichenfolge betrachtet.Beachten Sie, dass viele der Antworten hier nur Zeichenfolgen des Formulars betreffen
oder
Man kann einen regulären Ausdruck, Codekonstrukte oder eine Kombination der beiden verwenden, um die interessierenden Teilzeichenfolgen zu identifizieren. Ich kann nicht beurteilen, welcher Ansatz am besten ist. Ich werde nur den folgenden regulären Ausdruck präsentieren, der zu den interessierenden Teilzeichenfolgen passt.
Starten Sie Ihren Motor! 1
Ich habe dies mit der Regex-Engine PCRE (PHP) getestet, aber da die Regex überhaupt nicht exotisch ist, bin ich sicher, dass sie mit der Regex-Engine .NET (die sehr robust ist) funktioniert.
Die Regex-Engine führt die folgenden Vorgänge aus:
Diese Technik besteht darin, jeweils ein Zeichen nach der vorhergehenden Zeichenfolge abzugleichen, bis das Zeichen folgt
F
und folgtF
(oder allgemeiner gesagt, das Zeichen ist die Zeichenfolge, aus der die folgende Zeichenfolge besteht), wird als Tempered Greedy Token Solution bezeichnet .Natürlich müsste der reguläre Ausdruck (wenn möglich) geändert werden, wenn die oben dargelegten Annahmen geändert werden.
1. Bewegen Sie den Cursor, um detaillierte Erklärungen zu erhalten.
quelle
In C # 8.0 und höher können Sie den Bereichsoperator
..
wie in verwendenEinzelheiten finden Sie in der Dokumentation .
quelle