文字列のインデックスを検索したい \n\n または \n \n または \n \s* \n 検索は次のようなインデックスから開始します
mystring.LastIndexof(regularexpression, mystartindex)
同様に
mystring.Indexof(regularexpression, mystartindex)
文字列のインデックスを検索したい \n\n または \n \n または \n \s* \n 検索は次のようなインデックスから開始します
mystring.LastIndexof(regularexpression, mystartindex)
同様に
mystring.Indexof(regularexpression, mystartindex)
このオーバーロードを使用するRegex.Match
public Match Match(
string input,
int startat
)
例えば
Regex re("\n\s*\n");
var index = re.Match(mystring, mystartindex).Index;
Match.NextMatch
次の一致を取得するために使用できることに注意してください。
Match m = Regex.Match(mystring, re);
while (m.Success) {
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
m = m.NextMatch();
}
独自のソリューションから適応した更新:
public static class RegexMatchExtensions
{
public static int LastIndexOf(this MatchCollection matches, int index)
{
var match = matches.Cast<Match>().LastOrDefault(m => m.Index <= index);
return (match == null)? -1 : match.Index;
}
public static int IndexOf(this MatchCollection matches, int index)
{
var match = matches.Cast<Match>().FirstOrDefault(m => m.Index > index);
return (match == null)? -1 : match.Index;
}
}
使用法:
/*private static readonly*/ Regex re = new Regex(@"\n\s*\n",
RegexOptions.Compiled
| RegexOptions.Multiline
| RegexOptions.CultureInvariant);
var doubleLineIndexes = re.Matches(wholeDocumentText);
var first = doubleLineIndexes.IndexOf(73);
var last = doubleLineIndexes.LastIndexOf(73);
正規表現 re = new Regex(@"\n\s*\n"); MatchCollection DoubleLineIndexes = re.Matches(wholeDocumentText);
int LastIndexOf(MatchCollection mathes,int index) {
for (int i = 0; i < mathes.Count; i++)
{
if (mathes[i].Index > index) return mathes[i-1].Index;
}
return -1;
}
int IndexOf(MatchCollection mathes, int index)
{
for (int i = 0; i < mathes.Count; i++)
{
if (mathes[i].Index > index) return mathes[i].Index;
}
return -1;
}