ヘッダー
C# サンプル集
 

文字列を検索する

2021/10/24

→ Visual Basic のサンプルに切り替える

 

文字列内に「カペー」が含まれるか調べる

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";

if (value.Contains("カペー"))
{
    System.Diagnostics.Debug.WriteLine("カペーが含まれています。");
} 

Debug.WriteLineが表示される場所

 

これでもできます。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";

if (System.Text.RegularExpressions.Regex.IsMatch(value, "カペー"))
{
    System.Diagnostics.Debug.WriteLine("カペーが含まれています。");
}

Debug.WriteLineが表示される場所

 

これでもできます。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var results = System.Text.RegularExpressions.Regex.Matches(value, "カペー");

if (results.Count > 0)
{
    System.Diagnostics.Debug.WriteLine("カペーが含まれています。");
}

Debug.WriteLineが表示される場所

 

 

文字列内に「カペー」がいくつ含まれるか調べる

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var results = System.Text.RegularExpressions.Regex.Matches(value, "カペー");

System.Diagnostics.Debug.WriteLine("カペーの数:" + results.Count); // 2

Debug.WriteLineが表示される場所

 

これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var re = new System.Text.RegularExpressions.Regex("カペー");
var results = re.Matches(value);

System.Diagnostics.Debug.WriteLine("カペーの数:" + results.Count); // 2

Debug.WriteLineが表示される場所

 

 

文字列内の最初の「カペー」の位置を取得する

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
int index = value.IndexOf("カペー");

if (index >= 0)
{
    System.Diagnostics.Debug.WriteLine($"最初のカペーの位置:{index + 1}"); // 5
} 

Debug.WriteLineが表示される場所

 

これでもできます。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var result = System.Text.RegularExpressions.Regex.Match(value, "カペー");

if (result.Success)
{
    System.Diagnostics.Debug.WriteLine($"最初のカペーの位置:{result.Index + 1}"); // 5
}

Debug.WriteLineが表示される場所

 

 

文字列内の最後の「カペー」の位置を取得する

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
int index = value.LastIndexOf("カペー");

if (index >= 0)
{
    System.Diagnostics.Debug.WriteLine($"最後のカペーの位置:{index + 1}"); // 9
} 

 → Debug.WriteLineが表示される場所

 

これでもできます。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var results = System.Text.RegularExpressions.Regex.Matches(value, "カペー");

int index = results[results.Count - 1].Index; //results.Last().Index でもOK

System.Diagnostics.Debug.WriteLine($"最後のカペーの位置:{index + 1}"); // 9

Debug.WriteLineが表示される場所

メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。

 

 

文字列内の2番目の「カペー」の位置を取得する

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
int index1 = value.IndexOf("カペー"); //1番目のカペーの位置
int index2 = value.IndexOf("カペー", index1 + 1); //2番目のカペーの位置

System.Diagnostics.Debug.WriteLine($"2番目のカペーの位置:{index2 + 1}"); // 9 

 → Debug.WriteLineが表示される場所

メモ:「カペー」が2つ以上含まれない場合エラーになります。該当があったかは IndexOf の戻り値を調べるとわかります。戻り値が -1 のとき該当がないことを示しています。

 

これでもできます。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var results = System.Text.RegularExpressions.Regex.Matches(value, "カペー");

int index2 = results[1].Index;

System.Diagnostics.Debug.WriteLine($"2番目のカペーの位置:{index2 + 1}"); // 9

Debug.WriteLineが表示される場所

メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。

 

これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var re = new System.Text.RegularExpressions.Regex("カペー");
var results = re.Matches(value);

int index2 = results[1].Index; //2番目のカペーの位置

System.Diagnostics.Debug.WriteLine($"2番目のカペーの位置:{index2 + 1}"); // 9

Debug.WriteLineが表示される場所

メモ:「カペー」が2つ以上含まれない場合エラーになります。該当が2つ以上あるかは results.Count を調べるとわかります。

 

 

文字列内のすべての「カペー」の位置を取得する

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var results = System.Text.RegularExpressions.Regex.Matches(value, "カペー");

foreach (System.Text.RegularExpressions.Match result in results)
{
    System.Diagnostics.Debug.WriteLine($"カペーの位置は {result.Index + 1} 文字目です。");
}

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。

 

これでもできます。同じ検索を何度も実行する場合は、変数 re を使いまわせるこちらの方が効率的です。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
var re = new System.Text.RegularExpressions.Regex("カペー");
var results = re.Matches(value);

foreach (System.Text.RegularExpressions.Match result in results)
{
    System.Diagnostics.Debug.WriteLine($"カペーの位置は {result.Index + 1} 文字目です。");
}

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。

 

これでもできます。

string value = "ユーグ・カペーはカペー朝を開きましたが実体は地方の諸侯程度でした。";
int index = value.IndexOf("カペー");

while (index != -1)
{
    System.Diagnostics.Debug.WriteLine($"カペーの位置は {index + 1} 文字目です。");
    index = value.IndexOf("カペー", index + 1);
}

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

カペーの位置は 5 文字目です。
カペーの位置は 9 文字目です。

 

 

「カイン」または「アベル」を検索する

string value = "創世記によるとアダムの息子カインは嫉妬で弟アベルを殺したが、その具体的な理由は記載されていない。";
var results = System.Text.RegularExpressions.Regex.Matches(value, "(カイン|アベル)");

foreach (System.Text.RegularExpressions.Match result in results)
{
    System.Diagnostics.Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}");
}

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:カイン 開始位置:13
ヒット:アベル 開始位置:21

 

 

「中臣鎌足」または「藤原鎌足」を検索する

string value = "中大兄皇子は中臣鎌足と大化の改新を推進。鎌足は藤原鎌足となり藤原氏の祖となった。";
var results = System.Text.RegularExpressions.Regex.Matches(value, "(中臣|藤原)鎌足");

foreach (System.Text.RegularExpressions.Match result in results)
{
    System.Diagnostics.Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}");
}

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:中臣鎌足 開始位置:6
ヒット:藤原鎌足 開始位置:23