我有一个字符串"Item Name {Item Code} {Item ID}"
,我希望在第一次出现{}
即{Item Code}
之间提取文字,
我用了
Regex.Match( "Item Name {Item Code} {Item ID}", @"\{([^)]*)\}").Groups[0].Value
但我得到了"{Item Code} {Item ID}"
我该怎么做?
答案 0 :(得分:3)
\{([^)]*?)\}")
让它变得懒惰,它会起作用
恕我直言使用这样的正则表达式:\{(.*?)\}
你的正则表达式有一个无用的[^)]
,这个和*
的含义是选择)
字符,但没有)
。所以,最好用我的正则表达式。
答案 1 :(得分:2)
应该是{([^}]*)}
。不是字符类中的)
,而是}
。含义,匹配除{(1}}之外的所有内容。
当您输入}
时,可能需要使用{([^{}]+)}
。
答案 2 :(得分:0)
使用正则表达式会更好但是因为您使用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
method获取指定字符第一次出现的索引。