Практическое руководство. Поиск по строкам
Существует две основные стратегии для поиска текста в строках. Методы класса String выполняют поиск определенного текста. Регулярные выражения используются для поиска шаблонов в тексте.
Примеры C# в этой статье выполняются во встроенном средстве выполнения кода и на площадке Try.NET. Нажмите на кнопку Выполнить, чтобы выполнить пример в интерактивном окне. После выполнения кода вы можете изменить его и выполнить измененный код, снова нажав на кнопку Выполнить. Либо в интерактивном окне выполняется измененный код, либо, если компиляция завершается с ошибкой, в интерактивном окне отображаются все сообщения об ошибках компилятора C#.
Тип string является псевдонимом класса и реализует ряд полезных методов для поиска содержимого строк. Среди них: Contains, StartsWith, EndsWith, IndexOf, LastIndexOf. Класс System.Text.RegularExpressions.Regex предоставляет широкие возможности словаря для поиска шаблонов в тексте. В этой статье вы узнаете, как применять эти методы и как выбрать наилучший способ в зависимости от ваших потребностей.
Содержит ли строка текст?
Методы String.Contains, String.StartsWith и String.EndsWith выполняют поиск определенного текста в строке. В следующем примере показано использование каждого из этих методов, а также сценарии поиска без учета регистра:
В предыдущем примере показано важное правило использования этих методов. По умолчанию поиск выполняется с учетом регистра. Чтобы выполнить поиск без учета регистра, используйте значение перечисления StringComparison.CurrentCultureIgnoreCase.
Где искомый текст находится в строке?
Методы IndexOf и LastIndexOf также ищут текст в строках. Эти методы возвращают расположение текста, поиск которого выполняется. Если текст не найден, возвращается -1 . В следующем примере происходит поиск первого и последнего вхождения слова «methods» и отображение текста, находящегося между ними.
Поиск определенного текста с помощью регулярных выражений
Класс System.Text.RegularExpressions.Regex можно использовать для поиска строк. Такой поиск может отличаться по сложности от самых простых до очень сложных текстовых шаблонов.
В следующем примере кода выполняется поиск слов «the» и «their» в предложении без учета регистра. Статический метод Regex.IsMatch выполняет поиск. В метод передается строка и шаблон поиска. В нашем примере третий аргумент задает поиск без учета регистра. Для получения дополнительной информации см. System.Text.RegularExpressions.RegexOptions.
Шаблон поиска описывает текст для поиска. Следующая таблица описывает каждый элемент шаблона поиска. (В таблице ниже используется один \ , который в строке C# необходимо экранировать как \\ ).
| Шаблон | Значение |
|---|---|
| the | соответствует тексту «the» |
| (eir)? | Соответствует 0 или 1 вхождению «eir» |
| \s | Соответствует пробелу. |
Методы string обычно удобнее при поиске точного совпадения со строкой. Регулярные выражения больше подходят при поиске определенных шаблонов в исходной строке.
Соответствует ли строка шаблону?
В следующем коде реализуется проверка формата каждой строки в массиве с использованием регулярных выражений. По условиям проверки каждая строка должна иметь формат номера телефона: три группы цифр, разделенных дефисами. Первые две группы содержат по три цифры, и третья группа состоит из четырех цифр. Шаблон поиска использует регулярное выражение ^\\d<3>-\\d<3>-\\d<4>$ . Дополнительные сведения см. в разделе Элементы языка регулярных выражений. Краткий справочник.
| Шаблон | Значение |
|---|---|
| ^ | соответствует началу строки |
| \d | соответствует в точности 3 цифрам |
| — | соответствует символу «–» |
| \d | соответствует в точности 4 цифрам |
| $ | соответствует концу строки |
Один шаблон поиска соответствует множеству допустимых строк. Регулярные выражения больше подходят для поиска или проверки соответствия шаблону, а не для поиска отдельной строки текста.
Урок 22. Функции поиска в строках C#
Двадцать вторая часть учебника по основам C# завершает начальное изучение функций манипулирования строками, предоставляемых классом String. В статье рассматриваются методы, доступные для исследования содержимого строк.
Часто необходимо узнать длину строки, например, для проверки ввода пользователя. Класс String предоставляет свойство Length, которое дает нам эту информацию. Свойство возвращает целое число, представляющее количество символов.
Примечание: свойство Length выполняется довольно быстро. При проверке строки на пустоту более эффективно проверять нулевую длину, чем сравнивать строковое значение со String.Empty или»».
Поиск позиции текста в строке
На одном из предыдущих уроков мы рассмотрели метод Substring, который позволяет извлекать символы из заданной позиции в строке. Обратное ему — указать ряд символов и определить позицию, в которой подстрока появляется в строке. Это может быть достигнуто с помощью методов IndexOf и LastIndexOf.
IndexOf принимает параметр, содержащий подстроку для поиска. Если она существует в основной строке, возвращается позиция первого вхождения. Эта позиция называется указателем: целое число, указывающее количество символов между началом строки и найденным текстом. Для начала строки этот индекс равен нулю. Если подстрока не находится в основной строке, метод возвращает -1.
LastIndexOf похож на IndexOf. Однако вместо возврата индекса первого вхождения поискового термина LastIndexOf возвращает позицию последнего вхождения.
Указание границ поиска
IndexOf и LastIndexOf могут быть ограничены с указанием начальной позицию для поиска. С IndexOf можно найти только вхождения указанной подстроки справа или справа от этой позиции. При использовании LastIndexOf находятся только соответствующие подстроки слева от этой позиции.
Поиск может быть ограничен третьим параметром. Этот параметр представляет собой целое число, указывающее максимальное количество символов, которые могут быть рассмотрены. Если совпадение не существует в диапазоне символов, то результат будет равен -1.
Простые проверки на содержание
IndexOf и LastIndexOf полезны при определении точного положения подстрок в строках. Однако, иногда достаточно просто знать, что там имеется такая подстрока. Класс String предоставляет несколько методов для выполнения этих тестов.
StartsWith и EndsWith
StartsWith и EndsWith позволяют определить, начинается или заканчивается строка определенной серией символов. Оба метода принимают аргумент, содержащий строку для поиска соответствия, а возвращают логическое значени. Эти методы учитывают регистр.
Contains метод из .NET 2.0
Последняя строковая функция, ркоторую мы рассмотрим на сегодняшнем уроке – это Contains. Введенный в версии 2.0 .NET framework, он работает аналогично StartsWith и EndsWith, но проверяет, существует ли указанный поисковый символ в любой позиции в основной строке.
Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
статьи IT, Уроки по си шарп, string, си шарп,, поиск позиции в строке
Rich Text Box. Find Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Осуществляет поиск текста в содержимом RichTextBox.
Перегрузки
Осуществляет поиск первого экземпляра символа из списка символов по тексту элемента управления RichTextBox.
Осуществляет поиск текста в элементе управления RichTextBox.
С заданной начальной позиции осуществляет поиск первого экземпляра символа из списка символов по тексту элемента управления RichTextBox.
Осуществляет поиск в элементе управления RichTextBox текстовой строки с определенными параметрами, примененными к поиску.
Осуществляет поиск первого экземпляра символа из списка символов по отрезку текста элемента управления RichTextBox.
Осуществляет поиск текстовой строки в определенном месте текста элемента управления RichTextBox с примененными к поиску параметрами.
Осуществляет поиск текстовой строки в определенном отрезке текста элемента управления RichTextBox с примененными к поиску параметрами.
Find(Char[])
Осуществляет поиск первого экземпляра символа из списка символов по тексту элемента управления RichTextBox.
Параметры
Массив символов для поиска.
Возвращаемое значение
Расположение в элементе управления, если искомые символы были найдены, или -1, если искомые символы не были найдены, или в качестве параметра char был указан пустой набор символов.
Примеры
В следующем примере кода выполняется поиск символов RichTextBox , передаваемых методу в параметре text . Если содержимое массива text найдено, метод возвращает индекс найденного значения; в RichTextBoxпротивном случае возвращается значение -1. В примере требуется, чтобы этот метод помещается в класс, Form содержащий RichTextBox элемент управления с именем richTextBox1 и Button элемент управления с именем button1 , подключенный к обработчику событий, определенному Click в этом примере.
Комментарии
Эта версия Find метода выполняет поиск первого экземпляра символа из списка символов, указанных в параметре characterSet , и возвращает расположение символа. Например, вы передаете массив символов, содержащий символ Q. Если элемент управления содержал текст "Быстрая брауновая фокс", Find метод вернет значение четырех. Символ верхнего регистра и нижний регистр считаются различными значениями в поиске.
Если свойство возвращает отрицательное значение, поиск символов не найден в содержимом элемента управления. Этот метод можно использовать для поиска группы символов в элементе управления. Для этой версии Find метода требуется, чтобы весь документ, содержащийся в элементе управления, искал символы. Если найден символ из списка символов, указанного в параметре метода characterSet , значение, возвращаемое этим методом, является отсчитываемым от нуля индексом позиции символа в элементе управления. Пробел считается символом метода при определении расположения символа.
Применяется к
Find(String)
Осуществляет поиск текста в элементе управления RichTextBox.
Параметры
Текст, который необходимо найти в элементе управления.
Возвращаемое значение
Расположение в элементе управления, если искомый текст был найден, или -1, если искомая строка не были найдены, или в качестве параметра str была указана пустая строка.
Примеры
В следующем примере кода выполняется поиск всего содержимого RichTextBox первого экземпляра строки поиска, переданного в текстовый параметр метода. Если строка поиска найдена в объекте RichTextBox, метод возвращает значение true и выделяет текст поиска, в противном случае возвращается false . В примере требуется, чтобы этот метод помещается в класс, Form содержащий именованный RichTextBox richTextBox1 объект.
Комментарии
Метод Find выполняет поиск текста, указанного в параметре str , и возвращает расположение первого символа в элементе управления. Если свойство возвращает отрицательное значение, поиск текстовой строки не найден в содержимом элемента управления. Этот метод можно использовать для создания функций поиска, которые могут быть предоставлены пользователю элемента управления. Этот метод также можно использовать для поиска текста, заменяемого определенным форматом. Например, если пользователь ввел даты в элемент управления, можно использовать Find метод для поиска всех дат в документе и замены соответствующим форматом перед использованием SaveFile метода элемента управления.
МетодыFind, принимаюющие string в качестве параметра, не могут найти текст, содержащийся в нескольких строках текста.RichTextBox При выполнении такого поиска возвращается отрицательное значение (–1).
Применяется к
Find(Char[], Int32)
С заданной начальной позиции осуществляет поиск первого экземпляра символа из списка символов по тексту элемента управления RichTextBox.
Параметры
Массив символов для поиска.
Положение в тексте элемента управления, в котором будет начат поиск.
Возвращаемое значение
Положение в элементе управления, в котором были найдены искомые символы.
Примеры
В следующем примере кода выполняется поиск символов RichTextBox , передаваемых методу в параметре text . Поиск начинается из расположения, RichTextBox указанного FindMyText параметром start метода. Если содержимое текстового массива найдено в массиве, метод возвращает индекс найденного значения; в RichTextBoxпротивном случае возвращается значение -1. В примере требуется, чтобы этот метод помещается в класс, Form содержащий RichTextBox элемент управления с именем richTextBox1 и Button элемент button1 управления, подключенный к обработчику событий, определенному Click в этом примере.
Комментарии
Эта версия Find метода выполняет поиск первого экземпляра символа из списка символов, указанных в параметре characterSet , и возвращает расположение символа. Например, вы передаете массив символов, содержащий символ Q. Если элемент управления содержал текст "Быстрая брауновая фокс", Find метод вернет значение четырех. Символ верхнего регистра и нижний регистр считаются различными значениями в поиске.
Если свойство возвращает отрицательное значение, поиск символов не найден в содержимом элемента управления. Этот метод можно использовать для поиска группы символов в элементе управления. Если найден символ из списка символов, указанного в параметре метода characterSet , значение, возвращаемое этим методом, является отсчитываемым от нуля индексом позиции символа в элементе управления. Пробел считается символом метода при определении расположения символа.
Эта версия Find метода позволяет искать символьный набор из указанной начальной позиции в тексте элемента управления, указав значение параметра start . Нулевое значение указывает, что поиск должен начинаться с начала документа элемента управления. Эту версию Find метода можно использовать для сужения поиска, чтобы избежать того, чтобы текст, который вы уже знаете, не содержит указанные символы, которые вы ищете или не имеет значения в поиске.
Применяется к
Find(String, RichTextBoxFinds)
Осуществляет поиск в элементе управления RichTextBox текстовой строки с определенными параметрами, примененными к поиску.
Параметры
Текст, который необходимо найти в элементе управления.
Поразрядное сочетание значений RichTextBoxFinds.
Возвращаемое значение
Положение в элементе управления, в котором был найден искомый текст.
Примеры
В следующем примере кода выполняется поиск всего содержимого RichTextBox первого экземпляра строки поиска, переданного в текстовый параметр метода. Если строка поиска найдена в объекте RichTextBox, метод возвращает значение true и выделяет текст; в противном случае возвращается false значение. В примере также указываются параметры в поиске, соответствующие регистру указанной строки поиска. В примере требуется, чтобы этот метод помещается в класс, Form содержащий именованный RichTextBox richTextBox1 объект.
Комментарии
Метод Find выполняет поиск текста, указанного в параметре str , и возвращает расположение первого символа в элементе управления. Если свойство возвращает отрицательное значение, поиск текстовой строки не найден в содержимом элемента управления. Этот метод можно использовать для создания функций поиска, которые могут быть предоставлены пользователю элемента управления. Этот метод также можно использовать для поиска текста, заменяемого определенным форматом. Например, если пользователь ввел даты в элемент управления, можно использовать Find метод для поиска всех дат в документе и замены их соответствующим форматом перед использованием SaveFile метода элемента управления.
С помощью этой версии Find метода можно указать параметры, позволяющие расширить или сузить поиск. Можно указать параметры, позволяющие сопоставлять регистр слова поиска или искать целые слова, а не частичные слова. Указав перечисление RichTextBoxFinds.Reverse в параметре options , можно искать текст из нижней части документа в начало, а не метод поиска по умолчанию сверху вниз.
МетодыFind, принимаюющие string в качестве параметра, не могут найти текст, содержащийся в нескольких строках текста.RichTextBox При выполнении такого поиска возвращается отрицательное значение (–1).
Применяется к
Find(Char[], Int32, Int32)
Осуществляет поиск первого экземпляра символа из списка символов по отрезку текста элемента управления RichTextBox.
Параметры
Массив символов для поиска.
Положение в тексте элемента управления, в котором будет начат поиск.
Положение в тексте элемента управления, на котором поиск будет завершен.
Возвращаемое значение
Положение в элементе управления, в котором были найдены искомые символы.
Исключения
Параметр characterSet имеет значение null.
start меньше 0 или больше длины текста в элементе управления.
Комментарии
Эта версия Find метода выполняет поиск первого экземпляра символа из списка символов, указанных в параметре characterSet , и возвращает расположение символа. Например, вы передаете массив символов, содержащий символ Q. Если элемент управления содержал текст "Быстрая брауновая фокс", Find метод вернет значение четырех. Символ верхнего регистра и нижний регистр считаются различными значениями в поиске.
Если свойство возвращает отрицательное значение, поиск символов не найден в содержимом элемента управления. Этот метод можно использовать для поиска группы символов в элементе управления. Если найден символ из списка символов, указанного в параметре метода characterSet , значение, возвращаемое этим методом, является отсчитываемым от нуля индексом позиции символа в элементе управления. Пробел считается символом метода при определении расположения символа.
Эта версия Find метода позволяет искать набор символов из диапазона текста в элементе управления, указывая значение для start параметров и end параметров. Значение нуля для start параметра указывает, что поиск должен начинаться с начала документа элемента управления. Значение -1 для end параметра указывает, что поиск должен заканчиваться в конце текста в элементе управления. Эту версию Find метода можно использовать для сужения поиска до определенного диапазона текста в элементе управления, чтобы избежать поиска областей документа, которые не важны для потребностей приложения.
Применяется к
Find(String, Int32, RichTextBoxFinds)
Осуществляет поиск текстовой строки в определенном месте текста элемента управления RichTextBox с примененными к поиску параметрами.
Параметры
Текст, который необходимо найти в элементе управления.
Положение в тексте элемента управления, в котором будет начат поиск.
Поразрядное сочетание значений RichTextBoxFinds.
Возвращаемое значение
Положение в элементе управления, в котором был найден искомый текст.
Примеры
В следующем примере кода выполняется поиск всего содержимого RichTextBox первого экземпляра строки поиска, переданного в текстовый параметр метода. Начальная папка поиска определяется начальным параметром метода. Если строка поиска найдена, метод возвращает расположение индекса первого символа найденного текста и выделяет найденный текст; в RichTextBoxпротивном случае возвращается значение -1. В примере также указываются параметры в поиске, соответствующие регистру указанной строки поиска. В примере требуется, чтобы этот метод помещается в класс, Form содержащий именованный RichTextBox richTextBox1 объект. Этот пример можно использовать для выполнения операции "Найти далее". После обнаружения экземпляра текста поиска можно найти другие экземпляры текста, изменив значение start параметра для поиска в расположении за пределами текущего совпадения.
Комментарии
Метод Find выполняет поиск текста, указанного в параметре str , и возвращает расположение первого символа строки поиска в элементе управления. Если свойство возвращает отрицательное значение, поиск текстовой строки не найден в содержимом элемента управления. Этот метод можно использовать для создания функций поиска, которые могут быть предоставлены пользователю элемента управления. Этот метод также можно использовать для поиска текста, заменяемого определенным форматом. Например, если пользователь ввел даты в элемент управления, можно использовать Find метод для поиска всех дат в документе и замены соответствующим форматом перед использованием SaveFile метода элемента управления.
С помощью этой версии Find метода можно указать параметры, позволяющие расширить или сузить поиск. Можно указать параметры, позволяющие сопоставлять регистр слова поиска или искать целые слова, а не частичные слова. Указав перечисление RichTextBoxFinds.Reverse в параметре options , можно искать текст из нижней части документа в начало, а не метод поиска по умолчанию сверху вниз. Эта версия Find метода также позволяет сузить поиск текста, выбрав определенную начальную позицию в тексте элемента управления. Эта функция позволяет избежать поиска текста, который уже был выполнен или где определенный текст, который вы ищете, как известно, не существует. RichTextBoxFinds.Reverse Если значение указано в options параметре, значение start параметра указывает позицию, в которой будет заканчиваться обратный поиск, так как поиск начинается в нижней части документа при использовании этой версии Find метода.
МетодыFind, принимаюющие string в качестве параметра, не могут найти текст, содержащийся в нескольких строках текста.RichTextBox При выполнении такого поиска возвращается отрицательное значение (–1).
Применяется к
Find(String, Int32, Int32, RichTextBoxFinds)
Осуществляет поиск текстовой строки в определенном отрезке текста элемента управления RichTextBox с примененными к поиску параметрами.
Параметры
Текст, который необходимо найти в элементе управления.
Положение в тексте элемента управления, в котором будет начат поиск.
Положение в тексте элемента управления, на котором поиск будет завершен. Это значение должно быть равно минус единице (-1) либо больше или равно значению параметра start .
Поразрядное сочетание значений RichTextBoxFinds.
Возвращаемое значение
Положение в элементе управления, в котором был найден искомый текст.
Исключения
Параметр str имел значение null .
Значение параметра start меньше нуля.
-или- Параметр end был меньше параметра start .
Примеры
В следующем примере кода выполняется поиск раздела текста в RichTextBox первом экземпляре строки поиска, переданной searchText в параметр метода. Диапазон для поиска текста в элементе управления задается параметрами searchStart searchEnd метода. Если строка поиска найдена, метод возвращает расположение индекса первого символа найденного текста и выделяет найденный текст; в RichTextBoxпротивном случае возвращается значение -1. В примере также используется options параметр Find метода, чтобы указать, что найденный текст должен соответствовать регистру строки поиска. В примере требуется, чтобы этот метод помещается в класс объекта Form , содержащего RichTextBox элемент управления с именем richTextBox1 . После обнаружения первого экземпляра строки поиска можно использовать этот пример для поиска других экземпляров в тексте.
Комментарии
Метод Find выполняет поиск текста, указанного в параметре str , и возвращает расположение первого символа строки поиска в элементе управления. Если свойство возвращает отрицательное значение, поиск текстовой строки не найден в содержимом элемента управления. Этот метод можно использовать для создания функций поиска, которые могут быть предоставлены пользователю элемента управления. Этот метод также можно использовать для поиска текста, заменяемого определенным форматом. Например, если пользователь ввел даты в элемент управления, можно использовать Find метод для поиска всех дат в документе и замены их соответствующим форматом перед использованием SaveFile метода элемента управления.
С помощью этой версии Find метода можно указать параметры, позволяющие расширить или сузить поиск. Можно указать параметры, позволяющие сопоставлять регистр слова поиска или искать целые слова, а не частичные слова. Указав перечисление RichTextBoxFinds.Reverse в параметре options , можно искать текст из нижней части документа в начало, а не метод поиска по умолчанию сверху вниз. Эта версия Find метода также позволяет сузить поиск текста, выбрав определенную начальную и конечную позицию в тексте элемента управления. Эта функция позволяет ограничить диапазон поиска определенным разделом текста элемента управления. Если параметру присваивается end отрицательное значение (-1), метод будет выполнять поиск до конца текста в обычном RichTextBox поиске. Для обратного поиска значение отрицательного (-1), назначенное end параметру, указывает, что текст будет искаться в конце текста (внизу) до позиции, определенной параметром start . start При указании и end параметров одинаковое значение выполняется поиск всего элемента управления обычным поиском. Для обратного поиска выполняется поиск всего элемента управления, но поиск начинается в нижней части документа и выполняется поиск в верхней части документа.
МетодыFind, принимаюющие string в качестве параметра, не могут найти текст, содержащийся в нескольких строках текста.RichTextBox При выполнении такого поиска возвращается отрицательное значение (–1).