AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RegEx Frage

Ein Thema von hansklok · begonnen am 18. Jan 2016 · letzter Beitrag vom 18. Mai 2016
Antwort Antwort
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

RegEx Frage

  Alt 18. Jan 2016, 18:28
Hallo,

Ich möchte folgende Textzeile:
Code:
0 @Reference@ Objekt
mittels RegEx parsen.

Dazu verwende ich folgendes Pattern:
Code:
^(0|[1-9]+[0-9]*) (@[^@]+@ |)([A-Za-z0-9_]+)( [^\n\r]*|)$
Das funktioniert auch Tip Top, nur würde ich gern beim zweiten Match "(@[^@]+@ |)", dass nur der Inhalt zwischen den @-Zeichen gematcht wird. Inwiefern muss ich das Pattern abändern?

Herzliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#2

AW: RegEx Frage

  Alt 18. Jan 2016, 18:51
Noch paar Klammern  (@([^@]+)@ |) /  @([^@]+)@ | , (Klammern um das, was man haben will )
oder ein paar Look-Around

http://www.regular-expressions.info/lookaround.html
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#3

AW: RegEx Frage

  Alt 18. Jan 2016, 18:59
Noch paar Klammern  (@([^@]+)@ |) /  @([^@]+)@ | , (Klammern um das, was man haben will )
oder ein paar Look-Around

http://www.regular-expressions.info/lookaround.html
Danke himitsu.

Ich vergas zu erwähnen, dass der von @ eingeschlossene Wert optional ist! Deswegen wird das nichts, indem ich das @ einfach vor und hinter die Klammer setze.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#4

AW: RegEx Frage

  Alt 18. Jan 2016, 19:15
Ich vergas zu erwähnen, dass der von @ eingeschlossene Wert optional ist! Deswegen wird das nichts, indem ich das @ einfach vor und hinter die Klammer setze.
Dann mach die innere Klammer mittels eines Fragezeichens optional:
Code:
(@([^@]+)?@ |)
(oder sowas in der Art).

MfG Dalai
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: RegEx Frage

  Alt 18. Jan 2016, 19:51
Einmal wüst gebastelt:

Code:
^(0|[1-9][\d]*) (?:@?((?<=@)[^@]+(?=@)|)(?:@ )?)([\w]+)( [^\n\r]*|)$
Im Prinzip außenrum eine non-Capturing group für die @s, innen drin ein Look-Ahead/Look-Behind

Code:
^(0|[1-9][\d]*) (?:@?((?<=@)[^@]+(?=@)|(?!@))(?:@ )?)([\w]+)( [^\n\r]*|)$
verhindert dann auch noch
Code:
0 @@ Objekt
Durch das
Code:
[^\n\r]*
wird übrigens auch

Code:
0 Referenz Objekt
gematcht.
Sebastian
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#6

AW: RegEx Frage

  Alt 18. Jan 2016, 20:34
Code:
^(0|[1-9][\d]*) (?:@?((?<=@)[^@]+(?=@)|(?!@))(?:@ )?)([\w]+)( [^\n\r]*|)$
@SProske: Prima, das macht genau das, was es soll. Vielen lieben Dank Dir und den anderen Beitragenden dafür
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#7

AW: RegEx Frage

  Alt 8. Mai 2016, 16:40
So, ich greife das Thema erneut auf. Ich habe nun ein wunderbar funktionierendes RegEx-Pattern:
Code:
(0|[1-9][\d]*) (?:@?((?<=@)[^@]+(?=@)|(?!@))(?:@ )?)([A-Za-z0-9_]+)( [^\n\r]*|)
Nun gibt es drei Ausnahmen, die ich gern integrieren würde. Sie betreffen die Teil-Abschnitte
Code:
([A-Za-z0-9_]+)
und
Code:
( [^\n\r]*|)
. Wenn
Code:
([A-Za-z0-9_]+)
<> NOTE, CONT oder CONC ist, soll
Code:
( [^\n\r]*|)
getrimmt werden, sonst nicht. Wie würde das aussehen? Ich kenne mich mit Konditionalen Ausdrücken leider gar nicht aus.

Vielen Dank im Voraus
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: RegEx Frage

  Alt 17. Mai 2016, 11:50
Was meinst du mit "soll getrimmt werden"?

Prinzipiell kannst du die drei Sonderfälle NOTE, CONT oder CONC behandeln, in dem du etwas auf die Art:

Code:
(((NOTE|CONT|CONC)Sonderfall)|(([A-Za-z0-9_]+)Normalfall))
machst - das würde zwar auch den String "NOTENormalfall" parsen, ich glaube allerdings auf Grund der Angaben, das das Problem in deinem Fall nicht relevant ist.

Geändert von idefix2 (17. Mai 2016 um 11:55 Uhr)
  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 23:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz