Spiel nur die ersten und die letzten Zeichen einer Zeichenfolge
Hatte ich einen Blick auf die anderen stackoverflow Fragen und konnte Sie nicht finden, eine, die die gleiche Frage gestellt, also hier ist es:
Wie Sie mit dem ersten und dem letzten Zeichen einer Zeichenfolge werden können (multi-line oder leer).
So zum Beispiel:
String = "this is a simple sentence"
Beachten Sie, dass die Zeichenfolge enthält den Anfang und das Ende Anführungszeichen.
Wie bekomme ich mit dem ersten und dem letzten Zeichen, wo der string beginnt und endet mit einem Anführungszeichen (").
Habe ich versucht:
^"|$" and \A"\Z"
aber diese erzeugen nicht das gewünschte Ergebnis.
Dank für Eure Hilfe im Voraus 🙂
- Hast du das probiert:
".*"
(als regexp), so sollte es Aussehen, wenn Sie geben Sie es als string"\".*\""
- Es ist nicht wirklich klar, was du meinst. Mit dem übereinstimmen, was mit dem ersten und letzten Zeichen? Sie haben ein Beispiel gegeben-Eingang, aber nicht erklärt, warum dein regex sollte oder sollte nicht passen.
- Die
.*
nicht für neue-Zeile-Zeichen, so dass wäre ein Problem für mich. @Jon Skeet, möchte ich, um eine übereinstimmung des ersten und letzten Zeichens, wenn Sie beide ein Anführungszeichen. Wenn das Sinn macht. - Ja, es funktioniert. Erstellen Sie einfach das Muster mit der
DOTALL
- flag gesetzt haben, oder stellen Sie die pattern-string mit(?s)
. Siehe das Beispiel, das ich jetzt gepostet haben. Es gibt start-und Endposition. - Danke an alle für Eure Antworten. Leider habe ich nicht genug Ruf, um anzuzeigen, hilfreiche Antworten. Das mache ich nachträglich, sobald ich mehr Ruf. Cheers
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es das, was du suchst?
Diese ersetzen das erste und Letzte Zeichen der Eingabe eines Strings mit Leerzeichen auf, wenn es beginnt und endet mit
"
. Es wird auch die Arbeit mit mehreren Linien, da dieDOTALL
- flag angegeben ist, die durch(?s)
."this is a simple"""" sentence"
wirdthis is a simple"""" sentence
. Böhmische bekam die Antwort unten. Cheers"
, es ist ersetzt durch ein Leerzeichen. Wenn das nicht der Fall, wird der string nicht verändert..*
entspricht einer beliebigen Zeichenfolge.$1
, das ist der Inhalt, der mit gegen die.*
(== der Teil zwischen start-und end -"
). Es sei denn, Sie geben""
als Eingang, es kann niemals leer sein."
? Meine Lösung ersetzt, nur bei UND. Hängt von Ihren Anforderungen ab..."this is a string with only a starting quote
inthis is a string with only a starting quote
mine verlassen der Eingabe-string unangetastet in diesem Fall. Und das's unterliegen Ihre Anforderungen.Dem regex entspricht die gesamte Eingabe
".*"
. In java sieht das so aus:Wenn Sie wollen entfernen Anführungszeichen, verwenden Sie diese:
Wenn Sie wollen, dass diese arbeiten über mehrere Zeilen, verwenden Sie diese:
erzeugt die Ausgabe:
Erklärung der regex
(?m)(^"|"$)
:(?m)
heißt "Zirkumflex und dollar passen nach und vor der Zeilenumbrüche für den Rest des regulären Ausdrucks"(^"|"$)
bedeutet^"
ODER"$
, was bedeutet "start of line dann ein doppeltes Anführungszeichen" "ODER ""doppelte Anführungszeichen am Ende der Zeile" -(^\"|\"$)
wie Magie funktioniert. Vielen Dank 🙂 ich habeString.replaceAll("(^\"|\"$)", "")
für die Zeichenfolge"A\n\B\"C"
und ich kann wiederA\nB\"C
. Fantastisch.Warum nicht die einfache Logik, die immer die ersten und letzten Zeichen auf der Grundlage der
charAt
- Methode von String? Legen Sie ein paar Prüfungen für leere/unvollständige Zeichenfolgen und Sie getan werden sollte.String.replaceAll(regexPattern, "");
String#replaceAll
wird fast immer teurer sein als ein einfaches ersetzen von Zeichen-Methode aufrufen. Auch, wenn Sie wollen, dass die Zeichenfolge sans Anführungszeichen, können Sie immer wieder eine Ansicht basierend auf dersubstring
nennen.if(string.charAt(0).equals("\"") and string.charAt(string.length() - 1).equals("\"")) newString = String.subString(1, string.length() - 2);
(?s)
Idee. Dankstring.replaceFirst("(?s)\".*\"", "");
erhalten Sie""
zurück.