2010-01-14 2 views
9

У меня есть строка «В этом тексте есть текст (текст внутри скобок)». Поэтому я хочу получить текст внутри скобки, используя регулярные выражения в C#. Но скобки уже зарезервированы в регулярных выражениях. Итак, как это получить?Использование скобок в шаблоне регулярных выражений

Update 1

так и для текста "afasdfas (2009)"

Я попытался (.)/s((/d+)) и (.) (\d+) и (.*)/s((/d/d/d/d)). Ни один из них не работает. Есть идеи?

+1

FYI, все те, слэши в ваши регулярные выражения являются должен быть обратным слэшем, т. е. '/ s' должен быть' \ s'. –

ответ

16

Как это:

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

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

Edit:

@SealedSun, CannibalSmith: Изменено. Я также использую @ «», но это было с/р от RegexBuddy: P

@Gregg: Да, это действительно быстрее, но я предпочитаю держать его проще для ответа на такие вопросы.

+0

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

+1

Взял меня, чтобы выяснить, что второй '\' необходим, чтобы избежать escape-символа регулярного выражения '\'. Я всегда пишу свое регулярное выражение в стенографических строках: '@" \ ((. *?) \ "' Мне легче читать. –

+1

Или 'Regex RegexObj = new Regex (@" \ ((. *?) \) ");'. – CannibalSmith

4

Для любых символов, которые являются «специальными» для регулярного выражения, вы можете просто избежать их с помощью обратного слэша «\». Так, например:

\([^\)]*\) 

Захват «(текст внутри скобок)» в строке примера.

[^\)]* 

Должно быть немного безопаснее, чем просто "." в скобках, а также быть быстрее.

+1

Не нужно скрывать '' 'внутри класса символов. –

0

Просто добавьте \(, \) вокруг вашего скобок. , например:

(PatternInsideParenthesis)

будет выглядеть следующим образом:

\( (PatternInsideParenthesis) \)

Смежные вопросы