2010-01-14 20 views
9

ho una stringa "Questo testo ha qualche (testo all'interno parentesi)". Quindi voglio recuperare il testo tra parentesi usando le espressioni regolari in C#. Ma la parentesi è già un carattere riservato nelle espressioni regolari. Quindi come ottenerlo?Utilizzando parentesi nelle espressioni regolari modello

Update 1

così per il testo "afasdfas (2009)"

ho cercato (.)/s((/d+)) e (.) (\d+) e (.*)/s((/d/d/d/d)). Nessuno di loro sta funzionando. Qualche idea?

+1

Cordiali saluti, tutti coloro che le barre nelle vostre espressioni regolari sono si suppone che siano backslash, per esempio, '/ s' dovrebbe essere' \ s'. –

risposta

16

Ti piace questa:

// For "This text has some (text inside parenthesis)" 
Regex RegexObj = new Regex(@"\(([^\)]*)\)"); 

// For "afasdfas (2009)" 
Regex RegexObj = new Regex(@"\((\d+)\)"); 

Edit:

@SealedSun, CannibalSmith: Cambiato. Io uso @ "" ma questo era c/p da RegexBuddy: P

@Gregg: Sì, è davvero più veloce, ma preferisco che sia più semplice per rispondere a tali domande.

+0

+1, '(. *) \ ((\ D {4}) \)' –

+1

Mi ha portato po 'per capire che il secondo '\' è necessario per sfuggire il carattere di escape regex '\'. Scrivo sempre la mia espressione regolare nelle stringhe letterali:..? '@ "? \ ((*) \"' Trovo più facile da leggere –

+1

o 'Regex RegexObj = new Regex (@" \ ((*) \) ");'. – CannibalSmith

4

Per tutti i caratteri che sono "speciale" per un'espressione regolare, si può semplicemente fuggire con un backslash "\". Ad esempio:

\([^\)]*\) 

Acquisire "(testo tra parentesi)" nella stringa di esempio.

[^\)]* 

dovrebbe essere leggermente più sicuro di un semplice "" tra parentesi, e dovrebbe anche essere più veloce.

+1

Non è necessario sfuggire a ')' all'interno di una classe di caratteri. –

0

Basta aggiungere \(, \) intorno alla parentesi. per esempio:

(PatternInsideParenthesis)

sarà simile a questo:

\( (PatternInsideParenthesis) \)

Problemi correlati