Wie rufen Sie den ausgewählten text mit Regex in C#?
Frage
Wie rufen Sie den ausgewählten text mit Regex in C#?
Ich bin auf der Suche nach C# - code, die ist äquivalent zu dieser Perl-code:
$indexVal = 0;
if($string =~ /Index: (\d*)/){$indexVal = $1;}
Lösung
int indexVal = 0;
Regex re = new Regex(@"Index: (\d*)")
Match m = re.Match(s)
if(m.Success)
indexVal = int.TryParse(m.Groups[1].toString());
Ich hätte die Gruppe die Nummer falsch, aber Sie sollten in der Lage sein, um es herauszufinden, von hier aus.
Andere Tipps
Ich denke, Patrick genagelt diesem eins -- mein einziger Vorschlag ist, sich daran zu erinnern, dass named regex-Gruppen vorhanden sind, zu, so dass Sie nicht haben verwenden array-index-zahlen.
Regex.Match(s, @"Index (?<num>\d*)").Groups["num"].Value
Ich finde die regex ist ein bisschen mehr lesbar auf diese Weise auch, obwohl Meinungen variieren...
Sie werden wollen, nutzen Sie die aufeinander abgestimmten Gruppen, so etwas wie...
Regex MagicRegex = new Regex(RegexExpressionString);
Match RegexMatch;
string CapturedResults;
RegexMatch = MagicRegex.Match(SourceDataString);
CapturedResults = RegexMatch.Groups[1].Value;
Das wäre
int indexVal = 0;
Regex re = new Regex(@"Index: (\d*)");
Match m = re.Match(s);
if (m.Success)
indexVal = m.Groups[1].Index;
Sie können auch den Namen einer Gruppe (hier habe ich auch übersprungen Zusammenstellung der regexp)
int indexVal = 0;
Match m2 = Regex.Match(s, @"Index: (?<myIndex>\d*)");
if (m2.Success)
indexVal = m2.Groups["myIndex"].Index;
int indexVal = 0;
Regex re = new Regex.Match(s, @"(<?=Index: )(\d*)");
if(re.Success)
{
indexVal = Convert.ToInt32(re.Value);
}