Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   RegEx Hilfe (https://www.delphipraxis.net/188813-regex-hilfe.html)

hansklok 9. Apr 2016 12:46


RegEx Hilfe
 
Hi,

Folgende Struktur habe ich:
Code:
>Q28133 Bovin protein
MKAVFLTLLFGLVCTAQETPAEIDPSKIPGEWRIIYAAADNKDKIVEGGPLRNYYRRIEC
INDCESLSITFYLKDQGTCLLLTEVAKRQEGYVYVLEFYGTNTLEVIHVSENMLVTYVEN
YDGERITKMTEGLAKGTSFTPEELEKYQQLNSERGVPNENIENLIKTDNCPP
>P00257-2 Bovin protein
MAARLLRVASAALGDTAGRWRLLLKSSQFIKVSCSGSWISAAQRAFICYSKSGNITCFLR
SEDKITVHFINRDGETLTTKGKIGDSLLDVVVQNNLDIDGFGACEGTLACSTCHLIFEQH
IFEKLEAITDEENDMLDLAYGLTDRSRLGCQICLTKAMDNMTVRVPDAVSDARESIDMGM
NSSKIE
>C1_11500C_B Bovin protein
MDFMKPETVLDLANIRQALVRMEDTIVFDLIERSQFFSSPSVYEKNKYNIPNFDGTFLEW
ALLQLEVAHSQIRRYEAPDETPFFPDQLKTPILPPINYPKILAKYSDEINVNSEIMKFYV
DEIVPQVSCGQGDQKENLGSASTCDIECLQAISRRIHFGKFVAEAKYQSDKPLYIKLILD
KDVKGIENSITNSAVEQKILERLIVKAESYGVDPSLKFGQNVQSKVKPEVIAKLYKDWII
PLTKKVEIDYLLRRLEDEDVELVEKYKK
Pattern:
Code:
^>([^ ]*)\s(.*)[\r\n]((([a-zA-Z])+[\r\n])*)
Das funktioniert soweit auch ganz gut, nur wird die allerletzte Zeile PLTKKVEIDYLLRRLEDEDVELVEKYKK nicht gematcht. Warum?

Danke und Gruß

Dalai 9. Apr 2016 13:03

AW: RegEx Hilfe
 
Steht denn nach der letzten Zeile ein Zeilenumbruch? Wenn nicht, dann hast du den Grund, denn dein RegEx erwartet dort einen Umbruch.

MfG Dalai

hansklok 9. Apr 2016 13:05

AW: RegEx Hilfe
 
Zitat:

Zitat von Dalai (Beitrag 1335141)
Steht denn nach der letzten Zeile ein Zeilenumbruch? Wenn nicht, dann hast du den Grund, denn dein RegEx erwartet dort einen Umbruch.

MfG Dalai

Nein da steht keiner. Jedoch besagt ja das Sternchen
Code:
*
, dass keiner, einer oder mehrere Umbrüche folgen können. Insofern ist das nicht der Fehler, meiner Ansicht nach.

SProske 9. Apr 2016 13:18

AW: RegEx Hilfe
 
Wieso nicht einfach
Code:
^>([^ ]*)\s([^\r\n]*)[\r\n]+([A-Za-z\r\n]+)(?=$)
?

Und Dalai hat schon recht, da ist zwar ein Sternchen, das ist aber an der verkehrten Stelle um nur auf das [\r\n] zu wirken.
Das Lookahead am Ende ist nur dazu da, den letzten Zeilenumbruch vor nächsten Zeile nicht mit zu matchen.

roMultiline muss natürlich gesetzt sein.

Ich verwende übrigens https://regex101.com/ zum testen und herumspielen, die "explanation" und auch den Debugger finde ich im Allgemeinen sehr hilfreich - außerdem zeigt es auch noch an, wieviele Steps zum Match nötig waren (in dem Falle 59 vs. 1348)

Dalai 9. Apr 2016 13:20

AW: RegEx Hilfe
 
Doch, ist es. Dein Block
Code:
(([a-zA-Z])+[\r\n])*
sagt, dass Buchstaben UND Zeilenumbruch zusammen stehen muss (oder eben gar nichts davon). Da laut deiner Aussage der Zeilenumbruch fehlt, kann das nicht matchen.

MfG Dalai

hansklok 9. Apr 2016 13:21

AW: RegEx Hilfe
 
Perfekt, Dankeschön :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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