У меня есть строки длиной 15 символов. Я выполняю некоторые сопоставления с шаблоном с помощью регулярного выражения. Я хочу знать позицию подстроки, где функция IsMatch() возвращает true.
IsMatch()
Вопрос: Существует ли какая-либо функция, которая возвращает индекс совпадения?
Для нескольких матчей вы можете использовать код, подобный следующему:
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 используйте метод Matches . Это вернет MatchCollection , который содержит количество Match объектов. У них есть свойство Индекс .
Regex.Match("abcd", "c").Index 2
Примечание # Следует проверить результат Match.success, так как он возвращает 0 и может перепутать с позицией 0, пожалуйста, обратитесь к ответу Mark Byers. Благодаря.
Вместо использования IsMatch() используйте Matches:
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 означает отсутствие совпадения