Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Pode usar duas estratégias principais para procurar texto em cadeias de texto. Métodos da String classe procuram por texto específico. Expressões regulares procuram padrões no texto.
O tipo de cadeia , que é um alias para a System.String classe, fornece muitos métodos úteis para pesquisar o conteúdo de uma cadeia. Entre elas estão Contains, StartsWith, EndsWith, IndexOf, . LastIndexOf A System.Text.RegularExpressions.Regex classe oferece um vocabulário rico para procurar padrões em texto. Neste artigo, aprende estas técnicas e como escolher o melhor método para as suas necessidades.
Uma cadeia contém texto?
Os String.Containsmétodos , String.StartsWith, e String.EndsWith pesquisam uma cadeia de caracteres por texto específico. O exemplo seguinte mostra cada um destes métodos e uma variação, que utiliza uma pesquisa insensível a maiúsculas:
string factMessage = "Extension methods have all the capabilities of regular static methods.";
// Write the string and include the quotation marks.
Console.WriteLine($"\"{factMessage}\"");
// Simple comparisons are always case sensitive!
bool containsSearchResult = factMessage.Contains("extension");
// Raw string literals can work here because the output doesn't begin with "
Console.WriteLine($"""Contains "extension"? {containsSearchResult}""");
// For user input and strings that will be displayed to the end user,
// use the StringComparison parameter on methods that have it to specify how to match strings.
bool ignoreCaseSearchResult = factMessage.StartsWith("extension", System.StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine($"""Starts with "extension"? {ignoreCaseSearchResult} (ignoring case)""");
bool endsWithSearchResult = factMessage.EndsWith(".", System.StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine($"Ends with '.'? {endsWithSearchResult}");
O exemplo anterior demonstra um ponto importante para a utilização destes métodos. As pesquisas são sensíveis a maiúsculas minúsculas por defeito. Utiliza-se o StringComparison.CurrentCultureIgnoreCase valor de enumeração para especificar uma pesquisa sem distinção entre maiúsculas e minúsculas.
Onde ocorre o texto procurado numa sequência?
Os IndexOf métodos e LastIndexOf também procuram texto em strings. Estes métodos devolvem a localização do texto procurado. Se o texto não for encontrado, eles retornam -1. O exemplo seguinte mostra uma pesquisa pela primeira e última ocorrência da palavra "métodos" e mostra o texto intermédio.
string factMessage = "Extension methods have all the capabilities of regular static methods.";
// Write the string and include the quotation marks.
Console.WriteLine($"\"{factMessage}\"");
// This search returns the substring between two strings, so
// the first index is moved to the character just after the first string.
int first = factMessage.IndexOf("methods") + "methods".Length;
int last = factMessage.LastIndexOf("methods");
string str2 = factMessage.Substring(first, last - first);
Console.WriteLine($"""Substring between "methods" and "methods": '{str2}'""");
Encontrar texto específico usando expressões regulares
A System.Text.RegularExpressions.Regex classe pode ser usada para pesquisar strings. Estas pesquisas podem variar em complexidade desde padrões de texto simples até complexos.
O exemplo de código seguinte procura por as palavras "the" ou "their" numa frase, ignorando as maiúsculas e minúsculas. O método Regex.IsMatch estático realiza a pesquisa. Forneces uma cadeia de caracteres para pesquisar e um padrão de pesquisa. Neste caso, um terceiro argumento indica a busca insensível a maiúsculas. Para obter mais informações, consulte System.Text.RegularExpressions.RegexOptions.
O padrão de pesquisa descreve o texto que procura. A tabela seguinte descreve cada elemento do padrão de pesquisa. (A tabela seguinte utiliza o único \, que deve ser escapado como \\ numa string C#).
| Padrão | Meaning |
|---|---|
the |
Corresponde ao texto "the" |
(eir)? |
Corresponder a 0 ou 1 ocorrência de "eir" |
\s |
Corresponder a um caractere de espaço em branco |
string[] sentences =
[
"Put the water over there.",
"They're quite thirsty.",
"Their water bottles broke."
];
string sPattern = "the(ir)?\\s";
foreach (string s in sentences)
{
Console.Write($"{s,24}");
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
Console.WriteLine($" (match for '{sPattern}' found)");
}
else
{
Console.WriteLine();
}
}
Sugestão
Os string métodos são geralmente melhores escolhas quando procuras uma sequência exata. Expressões regulares são melhores quando procuras algum padrão numa cadeia de origem.
Uma corda segue um padrão?
O código seguinte utiliza expressões regulares para validar o formato de cada string num array. A validação exige que cada cadeia seja formatada como um número de telefone: três grupos de dígitos separados por traços, onde os dois primeiros contêm três dígitos e o terceiro grupo contém quatro dígitos. O padrão de pesquisa utiliza a expressão regular ^\\d{3}-\\d{3}-\\d{4}$. Para obter mais informações, consulte Linguagem de Expressão Regular - Referência Rápida.
| Padrão | Meaning |
|---|---|
^ |
corresponde ao início da corda |
\d{3} |
corresponde exatamente a caracteres de três dígitos |
- |
Corresponde ao carácter '-' |
\d{4} |
corresponde exatamente a caracteres de quatro dígitos |
$ |
Coincide com o final da cadeia de caracteres |
string[] numbers =
[
"123-555-0190",
"444-234-22450",
"690-555-0178",
"146-893-232",
"146-555-0122",
"4007-555-0111",
"407-555-0111",
"407-2-5555",
"407-555-8974",
"407-2ab-5555",
"690-555-8148",
"146-893-232-"
];
string sPattern = """^\d{3}-\d{3}-\d{4}$""";
foreach (string s in numbers)
{
Console.Write($"{s,14}");
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern))
{
Console.WriteLine(" - valid");
}
else
{
Console.WriteLine(" - invalid");
}
}
Este único padrão de pesquisa corresponde a muitas cadeias válidas. Expressões regulares são melhores para procurar ou validar contra um padrão, em vez de uma única cadeia de texto.