2016-04-17 16 views
0

Ich möchte zwischendurch den Klammern den Text nur haben, aber aus irgendeinem Grund es gibt mir die ganze SacheC# Regex Erfassung alles

Dies ist die regex ich

schrieb

<a href='ete(.+)'>det

Dies ist die Zeichenfolge

</td> 
<td> 
<a href='ete/d1460852470.html'>detailed list #11</a> (20.94KB) 
</td> 
<td> 
392 
</td> 
<td> 
4/17 12:21:10 am 
</td> 
</tr> 
<tr> 
<td> 
<a href='ete/1460845272.html'>ete #5</a> (6.71KB) 
</td> 
<td> 
<a href='ete/d1460845272.html'>detailed list #5</a> (19.76KB) 
</td> 
<td> 
372 
</td> 
<td> 
4/16 10:21:12 pm 
</td> 
</tr> 
<tr> 
<td> 
<a href='ete/1460839272.html'>ete #2</a> (6.62KB) 
</td> 
<td> 
<a href='ete/d1460839272.html'>detailed list #2</a> (19.4KB) 
</td> 
<td> 
366 
</td> 
<td> 
4/16 8:41:12 pm 
</td> 
</tr> 
<tr> 
<td> 
<a href='ete/1460830870.html'>ete #8</a> (6.72KB) 
</td> 
<td> 
<a href='ete/d1460830870.html'>detailed list #8</a> (19.76KB) 
</td> 

ich möchte nur den Text zwischen / und '

Aber das passiert jetzt nicht. Ich bekomme ein 3-dimensionales Array zurück.

Dies ist der Code, dass https://myregextester.com/index.php

 String sourcestring = "source string to match with pattern"; 
     Regex re = new Regex(@"<a href='ete(.+)'>det"); 
     MatchCollection mc = re.Matches(sourcestring); 
     int mIdx=0; 
     foreach (Match m in mc) 
     { 
     for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++) 
      { 
      Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value); 
      } 
     mIdx++; 
     } 
+0

Sie benötigen ein [lazy match] (https://regex101.com/r/iK7cK2/1). –

+0

@bobblebubble Sorry, faules Spiel funktioniert nicht, ich habe es schon versucht. Ich habe die Frage aktualisiert – Dgameman1

+0

Wir müssen den Code sehen, den Sie verwenden. Nur das Minimum, das notwendig ist, um das Problem zu demonstrieren, bitte. –

Antwort

0

Ihre Antwort ist bereits in einer der Match-Gruppen - m[n].Groups[1] gibt Ihnen nur Ihre Capture-Gruppe. m[n].Groups[0] gibt Ihnen den gesamten Text, der Ihrem regulären Ausdruck entspricht, nicht nur Ihre Erfassungsgruppe.

Wenn Sie pedantisch sein wollen, können Sie zu einem Lookahead und Lookbehind, z. (?<=<a href='ete).+(?='>det), um nur dem inneren Text zu entsprechen.

1

Ändern Sie den Regex produziert:

Regex re = new Regex(@"<a href='ete([^']+)'>det"); 

und Sie sollten erhalten, was Sie nach.

Es wird gesagt, dass alle Zeichen übereinstimmen, die nicht das schließende Zitat in der Gruppe sind, und dann die '>det danach übereinstimmen.