Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   C# Teil des Matches eines regulären Ausdrucks extrahieren (https://www.delphipraxis.net/46001-teil-des-matches-eines-regulaeren-ausdrucks-extrahieren.html)

Chewie 16. Mai 2005 14:21


Teil des Matches eines regulären Ausdrucks extrahieren
 
Ich habe hier die vom Siemens Mobile Phone Manager extrahierten SMS in Form von RTF-Dateien. Dort ist der Text der SMS und einige Steuerinformationen in die RTF-Datei kodiert, an diese Steuerinformationen würde ich gerne rankommen.

Eine Datei sieht in etwa so aus:
Zitat:

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\info{\* \SemKeywords SEM(SMS,NO_DM,NO_SMS_PIC,NO_SMS_SOUND,NO_STATUS_RE PORT,NO_REPLY_PATH,0-0-0-0-0-0-0,
privat,VPREL:0-0-0-63,ST:1,PBLIST:privat)}}{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}}
\viewkind4\uc1\pard\f0\fs24 Text der SMS\par
}
Der Teil, der hinter SEM in der Klammer steht, ist für mich interessant. Dazu möchte ich reguläre Ausdrücke verwenden, die mir leider schon seit jeher Probleme bereiten ;)

Mit folgendem Ausdruck bekomme ich den Teil ab dem info-Bezeichner:

Code:
\\\*\\SemKeywords SEM\(.*\)\}\}
Hier krieg ich natürlich nicht nur den Teil, der mich interessiert, sondern auch noch vornedran und hintendran was.
Meine Frage nun: wie kann ich den regulären Ausdruck modifizieren, dass ich nur den String
Zitat:

SMS,NO_DM,NO_SMS_PIC,NO_SMS_SOUND,NO_STATUS_REPORT ,NO_REPLY_PATH,0-0-0-0-0-0-0,
privat,VPREL:0-0-0-63,ST:1,PBLIST:privat
zurückbekomme?

mirage228 16. Mai 2005 14:24

Re: Teil des Matches eines regulären Ausdrucks extrahieren
 
Hi,

der RegEx von .NET sollte eigentlich mehrere Capture-Gruppen zurückliefern. Hast Du da schonmal geschaut?

mfG
mirage228

jfheins 16. Mai 2005 14:27

Re: Teil des Matches eines regulären Ausdrucks extrahieren
 
Vielleicht könntest du mit Rückreferenzen arbeiten, dann bekommst du z.B. den Teil des Erbebnisses, der der ersten, zeiten, ... Klammerung entspricht.

Dann müsstest du den Regulären Ausdruck so abändern:
Code:
\\\*\\SemKeywords SEM\([color=#ff0000]([/color].*[color=#ff0000])[/color]\)\}\}

Chewie 16. Mai 2005 14:31

Re: Teil des Matches eines regulären Ausdrucks extrahieren
 
@mirage228:

Ich hab den Audruck bisher nur in einem Test-Tool probiert. Aber was sind Capture-Gruppen?

Und wie hilft mir das, denn woher soll der RegExpr-Parser wissen, dass ich nur einen Teil des Ausdrucks will?

@jfheins:

Und was bewirkt das genau? Ich sehe nämlich bei deiner Änderung erstmal keinen Unterschied :?

jfheins 16. Mai 2005 14:48

Re: Teil des Matches eines regulären Ausdrucks extrahieren
 
Das eigendliche Ergebnis dürfte sich auch nicht unterscheiden, aber man kann (bestimmt auch in C#) danach auf die geklammerten Teile einzeln zugreifen ;)

P.S. Capture Gruppen müssten das gleiche sein, wie ein "geklammerter Teil" ...

Chewie 16. Mai 2005 15:18

Re: Teil des Matches eines regulären Ausdrucks extrahieren
 
OK, mit dem Ausdruck von jfheins und dem Tip mit der Capture-Gruppe klappt es, ich habe allerdings keine Ahnung, warum :?

Mein Code sieht nun so aus:
Code:
String regExpr = "\\\\\\*\\\\SemKeywords SEM\\((.*)\\)\\}\\}";
Regex regex = new Regex(regExpr);
Match match = regex.Match(content);

String options = match.Groups[1].Value;
Im zweiten Element steht der richtige Wert drin, warum auch immer.

Das Problem ist an für sich gelöst, ich würde aber gerne erfahren, warum :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz