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;}
War es hilfreich?

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top