Ответ 1
Для нескольких совпадений вы можете использовать код, подобный следующему:
Regex rx = new Regex("as");
foreach (Match match in rx.Matches("as as as as"))
{
int i = match.Index;
}
У меня есть строки длиной 15 символов. Я выполняю несколько шаблонов с ним с регулярным выражением. Я хочу знать позицию подстроки, где функция IsMatch()
возвращает true.
Вопрос: Есть ли какая-либо функция, которая возвращает индекс соответствия?
Для нескольких совпадений вы можете использовать код, подобный следующему:
Regex rx = new Regex("as");
foreach (Match match in rx.Matches("as as as as"))
{
int i = match.Index;
}
Используйте Match вместо IsMatch:
Match match = Regex.Match("abcde", "c");
if (match.Success)
{
int index = match.Index;
Console.WriteLine("Index of match: " + index);
}
Вывод:
Index of match: 2
Вместо использования IsMatch используйте метод Matchches. Это вернет MatchCollection, который содержит несколько Match. Они имеют свойство Index.
Regex.Match("abcd", "c").Index
2
Примечание # Должен проверить результат Match.success, потому что его возвращение 0, и может путать с позицией 0, пожалуйста, обратитесь к ответу "Марк Байерс". Спасибо.
Вместо IsMatch()
используйте Matches
:
const string stringToTest = "abcedfghijklghmnopqghrstuvwxyz";
const string patternToMatch = "gh*";
Regex regex = new Regex(patternToMatch, RegexOptions.Compiled);
MatchCollection matches = regex.Matches(stringToTest);
foreach (Match match in matches )
{
Console.WriteLine(match.Index);
}
Console.Writeline("Random String".IndexOf("om"));
Это выведет 4
a -1 указывает отсутствие соответствия