StringBuilder будет работать лучше от точки зрения памяти. Что касается обработки, разница во времени выполнения может быть незначительной.
Для нескольких совпадений вы можете использовать следующий код:
Regex rx = new Regex("as");
foreach (Match match in rx.Matches("as as as as"))
{
int i = match.Index;
}
Вместо использования IsMatch используйте метод Matches . Это вернет MatchCollection , который содержит несколько объектов Match . У них есть свойство Индекс .
Использовать 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
Regex.Match("abcd", "c").Index
2
Примечание # Следует проверить результат Match.success, потому что он возвращает 0 и может спутать с позицией 0, обратитесь к ответу Mark Byers. Спасибо.
Вместо использования 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);
}
Console.Writeline("Random String".IndexOf("om"));
Будет выведено 4
-1 означает отсутствие совпадения