Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A sztringekben lévő szöveg kereséséhez két fő stratégiát használhat. A String osztály metódusai specifikus szöveget keresnek. A reguláris kifejezések mintákat keresnek a szövegben.
A sztringtípus , amely az System.String osztály aliasa, számos hasznos módszert kínál a sztring tartalmának kereséséhez. Köztük van Contains, StartsWith, EndsWith, IndexOf, LastIndexOf. Az System.Text.RegularExpressions.Regex osztály gazdag szókincset biztosít a minták kereséséhez a szövegben. Ebben a cikkben megismerheti ezeket a technikákat, és hogyan választhatja ki az igényeinek leginkább megfelelő módszert.
Tartalmaz-e egy karakterlánc szöveget?
A String.Contains, String.StartsWithés String.EndsWith metódusok egy adott szövegre keresnek sztringet. Az alábbi példa az egyes metódusokat és a kis- és nagybetűkre nem érzékeny keresést használó változatot mutatja be.
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}");
Az előző példa egy fontos pontot mutat be ezeknek a módszereknek a használatához. A keresések alapértelmezés szerint megkülönböztetik a kis- és nagybetűket. Az StringComparison.CurrentCultureIgnoreCase enumerálási érték használatával megadhat egy kis- és nagybetűket nem érzékenyítő keresést.
Hol fordul elő a keresett szöveg egy sztringben?
A IndexOf és LastIndexOf metódusok sztringekben is keresnek szöveget. Ezek a metódusok visszaadják a keresett szöveg helyét. Ha a szöveg nem található, a rendszer visszaadja -1. Az alábbi példa bemutatja a "módszerek" szó első és utolsó előfordulásának keresését, és megjeleníti a közöttük lévő szöveget.
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}'""");
Adott szöveg keresése reguláris kifejezések használatával
Az System.Text.RegularExpressions.Regex osztály sztringek keresésére használható. Ezek a keresések összetettek lehetnek az egyszerűtől a bonyolult szövegmintákig.
Az alábbi példakód a "the" vagy a "their" szót keresi egy mondatban, figyelmen kívül hagyva az esetet. A statikus metódus Regex.IsMatch végrehajtja a keresést. Megadod a kereséshez a karakterláncot és a keresési mintát. Ebben az esetben egy harmadik argumentum határozza meg a kis- és nagybetűk közötti érzéketlen keresést. További információért lásd System.Text.RegularExpressions.RegexOptions.
A keresési minta a keresett szöveget írja le. Az alábbi táblázat a keresési minta minden elemét ismerteti. (Az alábbi táblázat az egyetlent \használja, amelyet c# sztringben kell \\ megszűrni.
| Pattern | Meaning |
|---|---|
the |
keresse meg a "the" szót |
(eir)? |
az "eir" 0 vagy 1 előfordulásának egyezése |
\s |
szóköz karakter egyeztetése |
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();
}
}
Jótanács
A string metódusok általában jobb választásnak számítanak, ha pontos sztringet keres. A reguláris kifejezések akkor jobbak, ha valamilyen mintát keres egy forrássztringben.
Követ egy karakterlánc mintát?
Az alábbi kód normál kifejezéseket használ a tömb egyes sztringjeinek formátumának ellenőrzéséhez. Az ellenőrzéshez minden sztringet telefonszámként kell formázni: három számjegycsoportot szaggatott vonallal elválasztva, ahol az első két csoport három számjegyet tartalmaz, a harmadik csoport pedig négy számjegyet. A keresési minta a reguláris kifejezést ^\\d{3}-\\d{3}-\\d{4}$használja. További információ: Regular Expression Language – Quick Reference.
| Pattern | Meaning |
|---|---|
^ |
A szöveg elejével egyezés |
\d{3} |
Pontosan három számjegy karakterének egyezése |
- |
Megegyezik a "-" karakterével |
\d{4} |
Pontosan négy számjegy karakterének felel meg |
$ |
Megfelel a karakterlánc végének |
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");
}
}
Ez az egyetlen keresési minta számos érvényes sztringnek felel meg. A reguláris kifejezések jobbak minták keresésére vagy érvényesítésére, mint egy szöveges karakterlánc esetén.