Подтвердить что ты не робот

Есть функция, которая возвращает индекс, где начинается соответствие RegEx?

У меня есть строки длиной 15 символов. Я выполняю несколько шаблонов с ним с регулярным выражением. Я хочу знать позицию подстроки, где функция IsMatch() возвращает true.

Вопрос: Есть ли какая-либо функция, которая возвращает индекс соответствия?

4b9b3361

Ответ 1

Для нескольких совпадений вы можете использовать код, подобный следующему:

Regex rx = new Regex("as");
foreach (Match match in rx.Matches("as as as as"))
{
    int i = match.Index;
}

Ответ 2

Используйте 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

Ответ 3

Вместо использования IsMatch используйте метод Matchches. Это вернет MatchCollection, который содержит несколько Match. Они имеют свойство Index.

Ответ 4

Regex.Match("abcd", "c").Index

2

Примечание # Должен проверить результат Match.success, потому что его возвращение 0, и может путать с позицией 0, пожалуйста, обратитесь к ответу "Марк Байерс". Спасибо.

Ответ 5

Вместо 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);
        }

Ответ 6

Console.Writeline("Random String".IndexOf("om"));

Это выведет 4

a -1 указывает отсутствие соответствия