2015-10-23 4 views
2

У меня есть простая строкаКак я могу получить определенный сегмент с регулярным выражением?

testteststete(segment1)tete(segment2)sttes323testte(segment3)eteste

мне нужно получить (segment2). Каждый сегмент может быть любым текстом. Я попытался использовать это регулярное выражение \(.+\). Но я получаю этот результат

enter image description here

Как я могу получить (segment2)? PS: Я хочу, чтобы все сегменты в скобках

+0

Я не уверен, правильно ли я это понял. Вы хотите получить определенную подстроку типа '(segment2)' из исходной строки? –

+0

@RahulTripathi Я хочу получить все сегменты в скобках – kriper

ответ

2

В C#, вы можете просто соответствовать всем (...) подстрок и затем доступ второй с использованием индекса 1:

var rx = @"\([^)]*\)"; 
var matches = Regex.Matches(str, rx).Cast<Match>().Select(p => p.Value).ToList(); 
var result = matches != null && matches.Count > 1 ? matches[1] : string.Empty; 

См IDEONE demo

регулярное выражение соответствует

  • \( - открытие (
  • [^)]* - 0 или больше, чем другие )
  • \) символов - закрытие ).
1

Я не могу проверить это, но это, вероятно, следует работать:

\([^\)]*\) 
1

Вы можете попробовать использовать это регулярное выражение:

\(([^)]+)\) 

REGEX DEMO

1
(?<=^[^()]*\([^)]*\)[^()]*\()[^)]* 

Вы можете просто использовать это. See Demo

1
var regex = new Regex(@"\(([^)]*)\)", RegexOptions.Compiled); 
string secondMatch = regex.Matches(text).Cast<Match>() 
    .Select(m => m.Value.Trim('(', ')')) 
    .ElementAtOrDefault(1); 
Смежные вопросы