中括弧で開始および終了する文字列から特定の要素を取得できる必要があります。文字列がある場合:
「asjfaieprnv{1}oiuwehern{0}oaiwefn」
どうすれば 1 だけを取得し、その後に 0 を取得できますか。
これには正規表現が非常に役立ちます。
一致させたいのは次のとおりです。
\{ # a curly bracket
# - we need to escape this with \ as it is a special character in regex
[^}] # then anything that is not a curly bracket
# - this is a 'negated character class'
+ # (at least one time)
\} # then a closing curly bracket
# - this also needs to be escaped as it is special
これを 1 行にまとめることができます。
\{[^}]+\}
次に、抽出したい部分を括弧で囲んでグループを形成することで、内部コンテンツをキャプチャして抽出できます。
\{([^}]+)\}
C# では次のようにします。
var matches = Regex.Matches(input, @"\{([^}]+)\}");
foreach (Match match in matches)
{
var groupContents = match.Groups[1].Value;
}
グループ 0 は一致全体 (この場合は{
andを含む}
)、グループ 1 は最初のかっこで囲まれた部分などです。
完全な例:
var input = "asjfaieprnv{1}oiuwehern{0}oaiwef";
var matches = Regex.Matches(input, @"\{([^}]+)\}");
foreach (Match match in matches)
{
var groupContents = match.Groups[1].Value;
Console.WriteLine(groupContents);
}
出力:
1
0
Indexof メソッドを使用します。
int openBracePos = yourstring.Indexof ("{");
int closeBracePos = yourstring.Indexof ("}");
string stringIWant = yourstring.Substring(openBracePos, yourstring.Len() - closeBracePos + 1);
それはあなたの最初のオカレンスを取得します。最初のオカレンスがなくなるように文字列をスライスしてから、上記の手順を繰り返して 2 番目のオカレンスを見つける必要があります。
yourstring = yourstring.Substring(closeBracePos + 1);
注: 中かっこをエスケープする必要がある場合があります: "{" - これについてはよくわかりません。C# でそれらを扱ったことがない
これは正規表現の仕事のように見えます
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string str = "asjfaieprnv{1}oiuwe{}hern{0}oaiwefn";
Regex regex = new Regex(@"\{(.*?)\}");
foreach( Match match in regex.Matches(str))
{
Console.WriteLine(match.Groups[1].Value);
}
}
}
}