| 

.NET C# Java Javascript Exception

5
Hallo,

ich versuche aus dem String =Code.GetLabel(Parameters!Labels,"textbox3") den Text textbox3 mit Regex.Replace zu extrahieren. Kann mir jemand weiterhelfen?

Danke und Gruss
Willimaendu
News:
26.10.2011
Willimaendu 31 3
Muss das mit Regex sein?
Du kannst auch einfach ein String.Replace machen:

String s = "Code.GetLabel(Parameters!Labels,\"textbox3\")";
String x = s.Replace("Code.GetLabel(Parameters!Labels,\"", String.Empty).Replace("\")", String.Empty);
SvenG 26.10.2011
3 Antworten
2
Regex exp = new Regex("textbox3");
string newText = exp.Replace(oldText, "neuer text");

MSDN: Regex.Replace Method

Nachschlag auf deine Rückfrage:
Es kommt darauf an, was du als Suche verwenden möchtest. Folgendes Pattern orientiert sich an den "
Regex exp = new Regex("\".*?\"");
newText = exp.Replace(oldText, "\"neuer text\"");


Noch ein Nachschlag:
Regex exp = new Regex("\".*?\"");
Match match = exp.Match(oldText);
newText = match.Value;
newText = match.Value.Replace("\"", "");//ohne "
26.10.2011
Jürgen Luhr 7,1k 2 9
Danke für deine Antwort!
Leider funktioniert das nicht wie gewünscht.. Ich weiss in diesem Fall immer, dass =Code.GetLabel(Parameter!Labels,"irgendwas") vorkommt.. ich möchte aber nur das Wort irgendetwas extrahieren..

Ich habe es mit =Code.GetLabel\(Parameters\!Labels,\".*? versucht, dann bekomme ich aber textbox3") zurück. Was muss ich noch machen, damit ") am Schluss auch noch verschwindet?
Willimaendu 26.10.2011
Mein Beispiel funktioniert für das, was du bislang in deiner Frage beschrieben hast.
Beschreibe doch bitte in deiner Frage genau, was du alles ersetzt haben möchtest. Besser wäre es noch, du würdest ein Stück von deinem Code posten, um besser auf dein Anliegen eingehen zu können.
Jürgen Luhr 26.10.2011
Ich möchte eigentlich lediglich =Code.GetLabel(Parameters!Labels," und ") wegputzen, so dass nur noch das Wort dazwischen übrig bleibt.

Also z.B. aus =Code.GetLabel(Parameters!Labels,"textbox3") => textbox3 oder aus =Code.GetLabel(Parameter!Labels,"irgendwas") => irgendetwas

Mit String.Replace() kann ich das ohne Probleme machen. Mich nimmt's aber Wunder wie man sowas mit Regex macht.
Willimaendu 26.10.2011
Aha. Du suchst nicht ein Replace sondern ein Match.
Siehe Antwort oben.
Jürgen Luhr 26.10.2011
1
Hi,

ein möglicher regex-ausdruck für gültige vb-strings (das sieht stark nach Access oder ReportServer aus) wäre
(?<=\s*=\s*Code\.GetLabel\s*\(\s*Parameter!Labels\s*,\s*")
(?:[^"]|"")*
(?="\s*\))


Entweder alles in eine Zeile schreiben, oder (in c#) als @"verbatim"-string zusammen mit RegexOptions.IgnorePatternWhitespace verwenden.

Gemached wird damit auch sowas wie
= Code.GetLabel ( Parameter!Labels , "irge""ndwas" )


Du bekommst in dem Fall aber dennoch irge""ndwas (Du musst also den Text (txt) noch mit
txt.Replace("\"\"", "\"")

bearbeiten, wenn Du den überhaupt haben willst.

Was nicht funktioniert sind Angaben wie
=Code.GetLabel(Parameter!Labels, "irge" + "ndwas")
=Code.GetLabel(Parameter!Labels, Trim("irgendwas"))

das wirst Du mit Regulären Ausdrücken auch kaum hinbekommen (es geht schon irgendwie, ist aber schlicht und wenig ergreifend das falsche Werkzeug für die Aufgabe -> parser).

Ich hab mehrfach \s* eingefügt - an den Stellen können potentiell Leerzeichen auftreten (falls nicht nötig, kannst Du die je entsprechend verwerfen/ersetzen)
Die letzte Zeile ist nur zur Überprüfung und nicht wirklich nötig, würde aber beim Beispiel oben (was nicht geht) irge zurückgeben

Ersetzen kannst Du einfach mit dem neuen Text (es wird nur der Text zwischen den Anführungsstrichen ausgewählt und damit auch ersetzt). Innerhalb eines MatchEvaluators kannst Du die Ersetzung recht einfach vom zu ersetzenden Wert abhängig machen...
26.10.2011
WolfgangKluge 1,0k 2 7
0
Hallo Jürgen,

der Wert textbox3 steht nur mal als Beispiel dort, da kann grundsätzlich ein beliebiger Text stehen... Wie würde die Regex dann aussehen?
26.10.2011
Willimaendu 31 3
Siehe meine editierte Antwort.
Jürgen Luhr 26.10.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH