C#を使用して文字列内のパターンのすべてのインデックスを見つける方法はありますか?例えばC#で文字列内のすべてのパターンインデックスを見つける#
私はそれクリーナー機能させるためのコードを編集この45##78$$#56$$JK01UU
C#を使用して文字列内のパターンのすべてのインデックスを見つける方法はありますか?例えばC#で文字列内のすべてのパターンインデックスを見つける#
私はそれクリーナー機能させるためのコードを編集この45##78$$#56$$JK01UU
string pattern = "##";
string sentence = "45##78$$#56$$J##K01UU";
IList<int> indeces = new List<int>();
foreach (Match match in Regex.Matches(sentence, pattern))
{
indeces.Add(match.Index);
}
indecesは、あなたが "パターン" を定義するにはどうすればよい2、14
ような文字列内のすべての##
パターンのインデックスを見つけたいです。
public IEnumerable<int> FindAllIndexes(string str, string pattern)
{
int prevIndex = -pattern.Length; // so we start at index 0
int index;
while((index = str.IndexOf(pattern, prevIndex + pattern.Length)) != -1)
{
prevIndex = index;
yield return index;
}
}
string str = "45##78$$#56$$JK01UU";
string pattern = "##";
var indexes = FindAllIndexes(str, pattern);
このような正規表現の検索を使用すると、文字列内のパターンのすべてのインデックスを取得できます。効率的になろうと
string input = "45##78$$#56$$JK01UU", pattern = Regex.Escape("##");
Regex rx = new Regex(pattern);
var indices = new List<int>();
var matches = rx.Matches(s);
for (int i=0 ; i<matches.Length ; i++)
{
indices.Add(matches[i].Index);
}
おそらく 'Regex.Escape()'をパターン上で実行する必要があります。 – yamen
@yamenよろしくお願いいたします。私の答えを更新しました。 – McGarnagle
もう1:
public IEnumerable<int> FindPatternIndexes(string input, string search)
{
var sb = new StringBuilder(input);
for (var i = 0; search.Length <= sb.Length; i++)
{
if (sb.ToString().StartsWith(search)) yield return i;
sb.Remove(0,1);
}
}
をテストしました。働いた。しかし、ややばかな。
string foo = "45##78$$#56$$JK01UU";
char[] fooChar = foo.ToCharArray();
int i = 0;
bool register = false;
foreach (char fc in fooChar)
{
if (fc == '#' && register == true)
{
MessageBox.Show("Index: " + (i-1));
}
else if (fc == '#')
{
register = true;
}
else
{
register = false;
}
i++;
}
を持っているのだろうか? –
何か試しましたか?あなたは正規表現を試しましたか? – SCB
いくつかの入力文字列と出力を表示できますか? – Habib