621 Stimmen

Regulärer Ausdruck zum Extrahieren von Text zwischen eckigen Klammern

Einfache Regex-Frage. Ich habe eine Zeichenfolge auf das folgende Format:

this is a [sample] string with [some] special words. [another one]

Wie lautet der reguläre Ausdruck, um die Wörter innerhalb der eckigen Klammern zu extrahieren, d. h.

sample
some
another one

Hinweis: In meinem Anwendungsfall können die Klammern nicht verschachtelt werden.

4voto

Nezar Fadle Punkte 1225

Dieser Code extrahiert den Inhalt zwischen eckigen Klammern und Klammern

(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))

(?: non capturing group
(?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses
| or
(?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets

4voto

Tony Ladson Punkte 3229

Versuchen Sie es in R:

x <- 'foo[bar]baz'
str_replace(x, ".*?\\[(.*?)\\].*", "\\1")
[1] "bar"

4voto

citynorman Punkte 4182

Ich musste die Zeilenumbrüche und die Klammern einschließen

\[[\s\S]+\]

3voto

spooks Punkte 49
([[][a-z \s]+[]])

Die obigen Angaben sollten mit der folgenden Erklärung funktionieren

  • Zeichen in eckigen Klammern[] definiert die Zeichenklasse, d.h. das Muster muss mindestens einem der Zeichen in den eckigen Klammern entsprechen.

  • \s gibt ein Leerzeichen an

  •  + bedeutet, dass mindestens eines der zuvor genannten Zeichen zu + gehört.

1voto

Andreas Punkte 5030

Wenn jemand eine Zeichenkette, die einen oder mehrere Punkte in eckigen Klammern enthält, abgleichen und auswählen möchte, z. B. " [fu.bar] "Verwenden Sie das Folgende:

(?<=\[)(\w+\.\w+.*?)(?=\])

Regex-Tester

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