У меня есть строка "Item Name {Item Code} {Item ID}"
и я хочу извлечь текст между первым вхождением {}
ie {Item Code}
, я использовал
Regex.Match( "Item Name {Item Code} {Item ID}", @"\{([^)]*)\}").Groups[0].Value
но я получил "{Item Code} {Item ID}"
Как мне это сделать?
Это должно быть {([^}]*)}
. Не a )
в классе символов, но a }
. Значение означает все, кроме (до) a }
.
Вы можете использовать {([^{}]+)}
когда у вас есть ввод, например foo {bar {baz} not match {}
.
\{([^)]*?)\}")
сделать его ленивым, он будет работать
IMHO использует регулярное выражение следующим образом: \{(.*?)\}
Ваше регулярное выражение имеет бесполезное [^)]
, значение этого вместе с *
будет выбирать до )
char, но его нет )
. Итак, лучше с моим регулярным выражением.
демо здесь: http://regex101.com/r/eM6iL0
Использование 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
получает индекс первого вхождения указанного символа.
[^)]
? Если вы используете ленивый квантификатор, вы можете написать{(.*?)}
.