Как получить строку текста, которая находится между двумя '{' круглыми скобками '}', установленными с помощью .NET?

1

У меня есть строка "Item Name {Item Code} {Item ID}" и я хочу извлечь текст между первым вхождением {} ie {Item Code}, я использовал

Regex.Match( "Item Name {Item Code} {Item ID}", @"\{([^)]*)\}").Groups[0].Value

но я получил "{Item Code} {Item ID}"

Как мне это сделать?

Теги:
string
substring

3 ответа

2
Лучший ответ

Это должно быть {([^}]*)}. Не a ) в классе символов, но a }. Значение означает все, кроме (до) a }.

Вы можете использовать {([^{}]+)} когда у вас есть ввод, например foo {bar {baz} not match {}.

3
\{([^)]*?)\}")

сделать его ленивым, он будет работать

IMHO использует регулярное выражение следующим образом: \{(.*?)\} Ваше регулярное выражение имеет бесполезное [^)], значение этого вместе с * будет выбирать до ) char, но его нет ). Итак, лучше с моим регулярным выражением.

демо здесь: http://regex101.com/r/eM6iL0

  • 2
    Зачем оставлять там бесполезный [^)] ? Если вы используете ленивый квантификатор, вы можете написать {(.*?)} .
  • 0
    @Qtax Я только что отредактировал ответ ОП, могут быть лучшие способы
Показать ещё 3 комментария
0

Использование regex лучше, но поскольку вы помечены substring, вот путь;

string s = "Item Name {Item Code} {Item ID}";
int index1 = s.IndexOf('{');
int index2 = s.IndexOf('}') ;
string result = s.Substring(index1 + 1, index2 - index1 - 1);
Console.WriteLine(result);

Здесь demonstration.

Метод IndexOf получает индекс первого вхождения указанного символа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню