[C #] Regex Zahlenkette ohne feste laenge

majoko

Grünschnabel
Hi,
ich hab einen String aus dem ich gerne bestimmte Teile mit Regex auslesen wuerde.
Leider variiert der String und ist nicht immer gleich lang. Ist dies dennoch moeglich.

Beispielstring(die Zahlen nach "post_message_" sind manchmal mehr, weniger und unterschiedlich...):


<div id="post_message_1935262">
<blockquote class="postcontent restore">
TEXT[<-ALLES WAS HIER STEHT SOLL AUSGELESEN WERDEN]
</blockquote>
</div>


Danke im Vorraus!

Edit: Falls das geht waere es super wenn der blockquote Teil auch nicht sein muss (er kommt auch nur manchmal vor) aber kann sodass ich kein if statement brauche...
 
Zuletzt bearbeitet:
Hi,
danke hab den Teil jetzt hingekriegt aber leider ergibt sich ein neues Problem:
Und zwar hab ich das Ende des Strings bisher mit "</div>" festgelegt wodurch der String allerdings abegkuerzt wird wenn der gesuchte Teil selber "</div>" beinhaltet.

Wenn ich also folgedenen String habe:
HTML:
<div id="post_message_123456789">
TEXT ZUM AUSLESEN
<div>
MEHR TEXT ZUM AUSLESEN
</div>
NOCH MEHR TEXT ZUM AUSLESEN
</div>
bekomme ich nur:
HTML:
TEXT ZUM AUSLESEN
<div>
MEHR TEXT ZUM AUSLESEN
und der letzte Teil wird ausgelassen.

Wie kann ich das Ende flexibel gestalten?


Bisheriger Code:
C#:
Match match = Regex.Match(threadHTML, "<div id=\"post_message_[0-9]*\">");
                
                    int startIndex = match.Index + match.Length;
                    int endIndex = threadHTML.IndexOf("</div>", startIndex);
                    string String= threadHTML.Substring(startIndex, endIndex - startIndex);
                    String = String.Trim();

                    MessageBox.Show(String);
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

Wenn div immer dein Ende ist, könntest du von hinten anfangen nach "</div>" zu suchen.
C#:
int endIndex = threadHTML.LastIndexOf("</div>");
 
Und zwar hab ich das Ende des Strings bisher mit "</div>" festgelegt wodurch der String allerdings abegkuerzt wird wenn der gesuchte Teil selber "</div>" beinhaltet.

Kein Problem mit Regulären Ausdrücken.

C#:
using System;
using System.Text.RegularExpressions;

class Program
{
	static void Main(string[] args)
	{
		string str = "<div id=\"post_message_1935262\"><blockquote class=\"postcontent restore\">TEXT[<-ALLES WAS HIER STEHT SOLL AUSGELESEN WERDEN]</blockquote></div>";
		string pattern = "^<div id=\"post_message_[0-9]+\">(.*)</div>"$;
		
		Regex rx = new Regex(pattern, RegexOptions.Singleline);
		
		Match m = rx.Match(str);
		
		if(m.Groups.Count > 1)
		{
			Console.WriteLine(m.Groups[1].Value);
		}
	}
}

Funktioniert für beide deine Beispiele.

Du solltest gänzlich auf die String-Operationen (IndexOf, Substring) etc. verzichten, wenn du ohnehin Reguläre Ausdrücke verwendest.
 
Zuletzt bearbeitet:
Du könntest dir meinen Wikiparser mal per Reflector anschauen, da suche ich unter anderem auch nach HTML Tags, ev. hilft es dir ja was.
Hatte schon längst vor den Code mal zu veröffentlichen, aber der liegt aufm anderen Rechner und da ist die Graka kaputt. Einer der Sicherungs USB's liegt im Auto und wo ich den anderen USB Stick hab hab ich vergessen. ^^
http://wikiparser.iv-interactive.de
Bin mir nur nicht mehr sicher wie genau ich mit HTML in HTML war.
 

Neue Beiträge

Zurück