Есть функция, которая возвращает индекс, где начинается соответствие RegEx?
У меня есть строки длиной 15 символов. Я выполняю несколько шаблонов с ним с регулярным выражением. Я хочу знать позицию подстроки, где функция IsMatch() возвращает true.
Вопрос: Есть ли какая-либо функция, которая возвращает индекс соответствия?
Ответ 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);
}