AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi C# Teil des Matches eines regulären Ausdrucks extrahieren
Thema durchsuchen
Ansicht
Themen-Optionen

Teil des Matches eines regulären Ausdrucks extrahieren

Ein Thema von Chewie · begonnen am 16. Mai 2005 · letzter Beitrag vom 16. Mai 2005
Antwort Antwort
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

Teil des Matches eines regulären Ausdrucks extrahieren

  Alt 16. Mai 2005, 15:21
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?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Teil des Matches eines regulären Ausdrucks extrahieren

  Alt 16. Mai 2005, 15:24
Hi,

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

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Teil des Matches eines regulären Ausdrucks extrahieren

  Alt 16. Mai 2005, 15:27
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]\)\}\}
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Teil des Matches eines regulären Ausdrucks extrahieren

  Alt 16. Mai 2005, 15:31
@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
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Teil des Matches eines regulären Ausdrucks extrahieren

  Alt 16. Mai 2005, 15:48
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" ...
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Teil des Matches eines regulären Ausdrucks extrahieren

  Alt 16. Mai 2005, 16:18
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
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 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