Laden...

Ausschließen eines Zeichens

Erstellt von allgaeu73 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.165 Views
A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren
Ausschließen eines Zeichens

Hallo,
ich durchlaufe ein Textfile und möchte beim Zutreffen eines Ausdruckes die Zeile auswerten.
Hier ein Ausschnitt des Textes:


    part "Z2004"
    part "Z2005"
    part "Z2006"
    part "ZZ186"
    part "J15",1
    part "J24",1
    part "J100",1
    part "J103",1
    part "J108",1

Ich möchte nur die jenigen Zeilen die nicht mit ",1" enden.
Das Ganze habe ich so versucht:


            	if(Regex.IsMatch(line_pdw,"(part)[\" \"][\"][a-zA-Z0-9]+[\"][^,]")){
                // do something
            	}


Der letzte Abschnitt, also [^,] wirkt irgendiwe nicht, keine Ahnung warum.
Kann mir jemand von euch weiter helfen?

Danke

Gruß
Andreas

3.003 Beiträge seit 2006
vor 8 Jahren

return listOfLines.Where(line => !line.EndsWith(",1"));

RegEx für solche Aufgaben ist, als ob du mit einer Pinzette Sand schaufelst. Es geht, dauert aber ein bisschen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

2.079 Beiträge seit 2012
vor 8 Jahren

Ich muss gestehen, ich verstehe nicht so ganz, was Du da gemacht hast 😄

Wenn ich das mit Regex lösen würde, dann wäre das mein Pattern:

part\s+"[a-zA-Z0-9]+"\s*$

Oder hier: https://regex101.com/r/zM2mN6/1/

ABER!
Regex ist sehr langsam und sicher nicht die richtige Wahl, wenn es darum geht, groß Mengen so simpler Zeichenfolgen zu filtern.

Prüfe lieber mit .EndsWith, ob die Zeilen mit ,1 enden, das sollte deutlich schneller laufen.

PS:
LaTino war schneller 😄
Aber das Bild mit der Pinzette Sand schaufeln ist gut 😄

49.485 Beiträge seit 2005
vor 8 Jahren

Hallo allgaeu73,

dein Pattern enthält einige Merkwürdigkeiten und du meinst vermutlich eher:

"part \"[a-zA-Z0-9]+\"[^,]"

Das Problem damit ist, dass du damit erzwingst, dass hinter dem letzten Anführungszeichen ein Zeichen folgt (also folgen muss), welches kein Komma ist. Bei den gültigen Zeilen folgt aber gar kein Zeichen.

Wenn du ausdrücken willst, dass kein Komma folgen soll, egal was stattdessen oder ob überhaupt etwas folgt, dann bräuchtest du einen negativen look ahead, also (?!,) statt [^,]

Insgesamt also

part \"[a-zA-Z0-9]+\"(?!,)

Oder wenn bei den gültigen Zeilen tatsächlich nie etwas folgt, dann reicht es auch, genau das auszudrücken:

part \"[a-zA-Z0-9]+\"$

herbivore