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

StringBuilder будет работать лучше от точки зрения памяти. Что касается обработки, разница во времени выполнения может быть незначительной.

31
задан Lev Levitsky 20 February 2013 в 16:39
поделиться

6 ответов

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

Regex rx = new Regex("as");
foreach (Match match in rx.Matches("as as as as"))
{
    int i = match.Index;
}
46
ответ дан 27 November 2019 в 21:51
поделиться

Вместо использования IsMatch используйте метод Matches . Это вернет MatchCollection , который содержит несколько объектов Match . У них есть свойство Индекс .

10
ответ дан 27 November 2019 в 21:51
поделиться

Использовать 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
15
ответ дан 27 November 2019 в 21:51
поделиться
Regex.Match("abcd", "c").Index

2

Примечание # Следует проверить результат Match.success, потому что он возвращает 0 и может спутать с позицией 0, обратитесь к ответу Mark Byers. Спасибо.

4
ответ дан 27 November 2019 в 21:51
поделиться

Вместо использования IsMatch () используйте Соответствия :

        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);
        }
2
ответ дан 27 November 2019 в 21:51
поделиться
Console.Writeline("Random String".IndexOf("om"));

Будет выведено 4

-1 означает отсутствие совпадения

-2
ответ дан 27 November 2019 в 21:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: