Ich habe eine Zeichenfolge, die zwei einfache Anführungszeichen enthält, das '
Zeichen. Zwischen den einfachen Anführungszeichen stehen die Daten, die ich möchte.
Wie kann ich einen regulären Ausdruck schreiben, um "die gewünschten Daten" aus dem folgenden Text zu extrahieren?
mydata = "some string with 'the data i want' inside";
java
regex
string
text-extraction
asdasd
quelle
quelle
this 'is' my 'data' with quotes
er vorzeitig beendet wird und zurückkehrt,is
anstatt so viele Zeichen wie möglich abzugleichen und zurückzukehrenis' my 'data
, was das Standardverhalten ist.Sie brauchen dafür keinen regulären Ausdruck.
Fügen Sie Ihrem Projekt apache commons lang hinzu ( http://commons.apache.org/proper/commons-lang/ ), und verwenden Sie dann:
quelle
quelle
Dafür gibt es einen einfachen Einzeiler:
Wenn Sie die übereinstimmende Gruppe optional machen, wird auch berücksichtigt, dass Anführungszeichen nicht gefunden werden, indem in diesem Fall ein Leerzeichen zurückgegeben wird.
Siehe Live-Demo .
quelle
Weil Sie auch Scala angekreuzt haben, eine Lösung ohne Regex, die sich leicht mit Zeichenfolgen in mehreren Anführungszeichen befasst:
quelle
.split('\'').get(2)
oder so etwas in Java? Ich denke, Sie müssen möglicherweise einen Gehirn-Scan durchführen, wenn Sie der Meinung sind, dass dies eine lesbare Lösung ist. Es sieht so aus, als hätte jemand versucht, mir Code-Golf zu spielen.quelle
wie in Javascript:
Der eigentliche reguläre Ausdruck ist:
/'([^']+)'/
Wenn Sie den nicht gierigen Modifikator verwenden (wie in einem anderen Beitrag beschrieben), ist dies folgendermaßen:
es ist sauberer.
quelle
In Scala,
quelle
String dataIWant = mydata.split("'")[1];
Siehe Live-Demo
quelle
Apache Commons Lang bietet eine Vielzahl von Hilfsprogrammen für die java.lang-API, insbesondere Methoden zur Manipulation von Zeichenfolgen. In Ihrem Fall sind die Start- und End-Teilzeichenfolgen identisch. Rufen Sie einfach die folgende Funktion auf.
Wenn die Start- und Endunterzeichenfolgen unterschiedlich sind, verwenden Sie die folgende überladene Methode.
Wenn Sie alle Instanzen der übereinstimmenden Teilzeichenfolgen möchten, verwenden Sie,
Für das betreffende Beispiel werden alle Instanzen des passenden Teilstrings abgerufen
quelle
Sie können diese while-Schleife verwenden, um alle übereinstimmenden Teilzeichenfolgen im Array zu speichern, wenn Sie verwenden
if (matcher.find()) { System.out.println(matcher.group(1)); }
Sie erhalten einen Übereinstimmungs-Teilstring, mit dem Sie alle Übereinstimmungs-Teilzeichenfolgen abrufen können
quelle
hinzufügen apache.commons Abhängigkeit von Ihrem pom.xml
Und unten Code funktioniert.
quelle
Einige, wie die Gruppe (1) für mich nicht funktioniert hat. Ich habe Gruppe (0) verwendet, um die URL-Version zu finden.
quelle