Ich habe eine Zeichenfolge User name (sales)
und möchte den Text zwischen den Klammern extrahieren. Wie würde ich das tun?
Ich vermute eine Teilzeichenfolge, kann aber erst in der schließenden Klammer herausfinden, wie sie gelesen werden soll. Die Textlänge variiert.
Antworten:
Wenn Sie sich von regulären Ausdrücken fernhalten möchten, ist der einfachste Weg, den ich mir vorstellen kann:
quelle
var input = "(fdw) User name (sales) safdsdf (again?)"; var output = input.Split('(', ')').Where((item, index) => index % 2 != 0).ToList();
sales
auch aus Eingabezeichenfolgen extrahiert)sales(
, die(sales(
usw. enthaltenEine sehr einfache Möglichkeit ist die Verwendung regulärer Ausdrücke:
Als Antwort auf den (sehr lustigen) Kommentar hier derselbe Regex mit einigen Erklärungen:
quelle
var filterRegex = new Regex(Regex.Escape("(") + "([^()]*)" + Regex.Escape(")"));
Angenommen, Sie haben nur ein Klammerpaar.
quelle
int end = s.IndexOf(")", start);
. Ich habe eine Bearbeitung in die Warteschlange gestellt ...Verwenden Sie diese Funktion:
und hier ist die Verwendung:
und die Ausgabe wäre:
quelle
Reguläre Ausdrücke könnten hier das beste Werkzeug sein. Wenn Sie mit ihnen nicht vertraut sind, empfehle ich Ihnen, Expresso zu installieren - ein großartiges kleines Regex-Tool.
Etwas wie:
quelle
quelle
input = "User name (sales(1))
, möchten Sie möglicherweise eine verwenden,input.LastIndexOf(')')
die funktioniert, wenn eine innere Klammer vorhanden ist oder nicht.Ein Regex vielleicht? Ich denke das würde funktionieren ...
quelle
quelle
Verwenden Sie einen regulären Ausdruck:
quelle
quelle
quelle
Die
regex
Methode ist meiner Meinung nach überlegen, aber wenn Sie die bescheidenen verwenden wolltensubstring
oder
quelle
Hier ist eine allgemein lesbare Funktion, die die Verwendung von Regex vermeidet:
Um es in Ihrem speziellen Beispiel zu nennen, können Sie Folgendes tun:
quelle
Ich finde, dass reguläre Ausdrücke äußerst nützlich, aber sehr schwer zu schreiben sind. Also habe ich einige Nachforschungen angestellt und dieses Tool gefunden , das das Schreiben so einfach macht.
Scheuen Sie sich nicht vor ihnen, denn die Syntax ist schwer herauszufinden. Sie können so mächtig sein.
quelle
Ich bin darauf gestoßen, als ich nach einer Lösung für eine sehr ähnliche Implementierung gesucht habe.
Hier ist ein Ausschnitt aus meinem aktuellen Code. Startet die Teilzeichenfolge ab dem ersten Zeichen (Index 0).
quelle
Dieser Code ist schneller als die meisten Lösungen hier (wenn nicht alle) und als String- Erweiterungsmethode gepackt. Er unterstützt keine rekursive Verschachtelung:
Dieser ist etwas länger und langsamer, aber er handhabt rekursives Verschachteln besser:
quelle