4 Stimmen

Daten aus Zitaten herausziehen?

Ich bin auf der Suche nach einer Regex, die Anführungszeichen in einer Zeichenfolge herausziehen kann, sowohl einfache als auch doppelte Anführungszeichen.

IE:

"This is 'an example', \"of an input string\""

Spielt:

  • ein Beispiel
  • einer Eingabezeichenkette

Ich habe das hier geschrieben:

 [\"|'][A-Za-z0-9\\W]+[\"|']

Es funktioniert, aber sieht jemand irgendwelche Schwachstellen darin?

EDIT: Das Hauptproblem, das ich sehe, ist, dass es nicht mit verschachtelten Anführungszeichen umgehen kann.

0 Stimmen

Der von Ihnen angegebene reguläre Ausdruck scheint überhaupt nicht auf Ihre Beispielzeichenkette zu passen. Was ist mit Leerzeichen in Anführungszeichen?

0 Stimmen

Ich denke, Sie meinen [\"'], denn [\"|'] passt auch auf das | (Pipe). Sie brauchen die Pipe nicht, um ein "oder" in eckigen Klammern auszudrücken.

0 Stimmen

3voto

Bill the Lizard Punkte 384619

Wie werden einfache Anführungszeichen innerhalb von doppelten Anführungszeichen (oder umgekehrt) behandelt?

"This is 'an example', \"of 'quotes within quotes'\""

sollte übereinstimmen

  • ein Beispiel
  • von 'Anführungszeichen in Anführungszeichen'

Verwenden Sie einen Rückverweis, wenn Sie dies unterstützen müssen.

(\"|')[A-Za-z0-9\\W]+?\1

EDIT: Korrigiert, um einen widerstrebenden Quantifizierer zu verwenden.

1voto

Tomalak Punkte 320467

Wie das?

"([\"'])(.*?)\1"

Die von Ihnen gewünschte Übereinstimmung wäre in Untergruppe 2 und die Art des Angebots in Gruppe eins.

Der Fehler in Ihrer Regex ist 1) das gierige "+" und 2) [A-Za-z0-9] passt nicht wirklich sehr gut. Viele Zeichen liegen nicht in diesem Bereich.

0voto

Chris Bunch Punkte 83897

Es funktioniert, findet aber keine anderen Zeichen in Anführungszeichen (z. B. nicht-alphanumerische Zeichen wie binäre Zeichen oder Zeichen in Fremdsprachen). Wie wäre es mit diesem:

[\"']([^\"']*)[\"']

Meine C# Regex ist ein wenig eingerostet, also seien Sie nachsichtig mit mir, wenn das nicht genau richtig ist :)

0voto

jfs Punkte 370717
@"(\"|')(.*?)\1"

0voto

joshua.ewer Punkte 3894

Vielleicht haben Sie so etwas schon, aber falls nicht, hier ist ein kostenloses Open-Source-Tool, das ich ständig verwende, um meine regulären Ausdrücke zu testen. In der Regel habe ich eine allgemeine Vorstellung davon, wie der Ausdruck aussehen sollte, muss aber mit einigen Details herumspielen.

http://renschler.net/RegexBuilder/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X