VB.NET REGEX in Python - unexpected end of pattern
Scheinbar schon oO' Implementier die .net Bibliothek für RegEx nach, benutz IronPython oder schmeiß den Ausdruck weg und benutz was anderes (anderer ausdruck, obwohl sowas für einen RegEx schwer wird, CSV-Bibliothek angepasst)..streetfox hat geschrieben:geht nicht gibts nicht
Eben all das, was dir die anderen hier auch geraten haben oO''
Übrigens war deine letzte Antwort auch nicht von Höflichkeit gefüllt. Eher von Spott und vor allem von unverständlichkeit von dem, was ich gesagt habe.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Also das kann man doch nicht verallgemeinern - im Gegenteil gibts sicherlich auch solche, wo das gerade nicht erwünscht ist Davon abgesehen ging es hier doch sachlich zu!streetfox hat geschrieben: In foren solls schliesslich sachlich zu und her gehen.
Ja und? Wen stört das? Und auch hier liegst Du falsch: Man lernt ja nicht weniger über Python, nur weil man den dafür vorgesehenen Weg geht, und man lernt anders herum nicht mehr, nur weil man einen "tollen" RegExp bastelt!streetfox hat geschrieben: Ich ess jetzt meine Waffel ist zeit dazu ... das einzige Problem an der Sache ist, das ich halt weniger über Python lern und wieder VB mach. Meinetwegen.
Also ich denke der Glückszustand jedes einzelnen hier ist nicht von Dir abhängigDann seid ihr glücklich und ich auch.
geht nicht, gibts nicht ist eine Lebenseinstellung und nicht eine Höflichkeitsform.
Schade nimmt man sich selbst so wichtig. Also ich gebe auf, es gibt keine REGEXP in Python die genauso mächtig ist wie diese nach der ich gefragt habe.
dankeschön einstweilen
Schade nimmt man sich selbst so wichtig. Also ich gebe auf, es gibt keine REGEXP in Python die genauso mächtig ist wie diese nach der ich gefragt habe.
dankeschön einstweilen
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Was stimmt den nicht?streetfox hat geschrieben:@Trundle:
leider ned:
Code: Alles auswählen
[ ['Value1;', 'Value2', '"Value3"', 'of "very" "difficult"', '', 'expressions'], ['and', '', 'we should not ;"then"; forget', 'that it \nworks ;'], ['as ""ss""'], ['expected""'], ['And', 'this "is"', ' a', 'new start'], ['And2', 'this is a', 'new start as well'], ['only this" line"', ' is malformat;ted with" quotes"']]
Wenn ichs von Hand durchgehe, komm ich aufs selbe Resultat (bis auf die letzte Zeile, die ist aber extra Falsch)
Gruss
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also, ich erkläre dir warum die Regex nicht tut (was audax auch schon meinte, ich habe es eben etwas ausformuliert) und dass man meist am besten auf den CSV-Parser der in der Stdlib zugreift. Und dann erklärst du mir das das erstens niemanden interessiert (Hyperion klang recht interressiert.. tut mir Leid, dass ich ihm etwas über .NET erklärt habe) und zweitens dass es unsachlich ist.streetfox hat geschrieben:Ob wahr oder nicht, steht doch nicht zur debatte. Die Frage geht um die REGEXP. Dass Leonidas recht hat mit der eigenen Suppe is ja ok. Aber die Meinung hilft dem Problem nun mal nicht weiter.
Ich mag nun mal nicht wenn irgendwelche gescheiten leute die ganze zeit was zu motzen haben. In foren solls schliesslich sachlich zu und her gehen.
Die Logik muss ich nicht verstehen, oder? Mir wird ja öfters etwas vorgeworfen (meist Unfreundlichkeit und manchmal auch zurecht) aber in diesem Fall muss ich zugeben, dass ich mir durchaus Mühe gegeben habe Dinge zu erklären und Möglichkeiten aufzuzeigen. Warum das "keinen interessiert" und "unsachlich" ist geht über mein Verständnis :K
Übrigens würde ich gerne den VB.net Code dazu sehen oO Ich versuchs grade in IronPython umzusetzen, aber da funktionierts auch nicht... auch nicht, wenn ich die .net Systembibliothek verwende.
Wirft nur Hühnerkacke heraus.
Code: Alles auswählen
from System.Text.RegularExpressions import Regex
re = Regex('(?>([^,"]*("[^"]*")*[^,"]*)*)("[^"]*)?')
text = '''"Value1;";"Value2";"""Value3""";"of ""very"" ""difficult""";"";"expressions"
"and";"";"we should not ;""then""; forget";"that it
works ;"
as ""ss""
expected""
"And";"this ""is""";" a";"new start"
"And2";"this is a";"new start as well"
"only "this" line";" is malformat;ted "with" quotes"'''
for i in re.Matches(text):
print i
@rayo
.... nö, das oben ist 1 Record und nicht 3, auch von hand
@trundle, ja klar
Code: Alles auswählen
"that it
works ;"
as ""ss""
expected""
"And"
@trundle, ja klar
Code: Alles auswählen
Dim list As StringCollection = New StringCollection()
Dim ptest As New Regex("(?>([^,""]*(""[^""]*"")*[^,""]*)*)(""[^""]*)?")
Dim MatchResult As Match = ptest.Match(DATA)
While MatchResult.Success
list.Add(MatchResult.Value)
MatchResult = MatchResult.NextMatch()
End While
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Bei mir startet er beim ersten Anführungszeichen in der ersten Zeile und endet in der 2. Zeile beim Schlusszeichen. Dann kommen Records, die die ganze Zeile lang sind.streetfox hat geschrieben:@rayo
.... nö, das oben ist 1 Record und nicht 3, auch von handCode: Alles auswählen
"that it works ;" as ""ss"" expected"" "And"
Daher stimmt das schon mit 3 Records oder warum endet bei dir der Record nicht in der 2. Zeile beim Schlusszeichen?
Welcher Version der .net Laufzeitumgebung verwendest du denn? Auf jedenfall funktionierts mit IronPython auch nicht... und das verwendet exakt die selbe Bibliothek wie du.
@Trundel
.NET 3.5 SP1
@rayo
problem ist, dass hier mit einem free-text feld gearbeitet wurde. Im system werden die sonderzeichen nicht sauber ausgewiesen....
z.B.
somit ist der record nicht beim vermeintlichen zeilenumbruch innerhalb des "..."; feldes zuende, sondern bei Fall 3
also gibt es 3 Fälle für einen Datensatz
.NET 3.5 SP1
@rayo
problem ist, dass hier mit einem free-text feld gearbeitet wurde. Im system werden die sonderzeichen nicht sauber ausgewiesen....
z.B.
Code: Alles auswählen
" statt
\"
oder
LF (als zeichen)
statt
\n
also gibt es 3 Fälle für einen Datensatz
- Fall1: " zu beginn des Files
Fall2: ";" immer dazwischen
Fall3: ;"..." + LF + "..."; Am Ende des Datensatzes
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Also ich kapiers noch nicht wirklich, wann der Datensatz nun zu ende sein soll und wann nicht.
Wie kann man erkennen ob die Daten auf der nächsten Zeile zur vorherigen Zeile gehören? Immer wenn auf der neuen Zeile nur ein Feld ("...") ist, gehörts zum vorherigen Datensatz? (Was ist dann mit csv-Files mit einer Zelle?)
Gruss
Wie kann man erkennen ob die Daten auf der nächsten Zeile zur vorherigen Zeile gehören? Immer wenn auf der neuen Zeile nur ein Feld ("...") ist, gehörts zum vorherigen Datensatz? (Was ist dann mit csv-Files mit einer Zelle?)
Ich denke nicht, dass das jemals eingepflegt wird, denn so wie du es beschrieben hast, sind die Sonderzeichen nicht richtig ... sprich das Feld ist fehlerhaft.streetfox hat geschrieben:Wenn es uns gelingt das zu knacken kann ja jemand dafür sorgen dass dies in die stdlib vom CSV Parser eingepflegt wird?
Gruss
Code: Alles auswählen
"...";"text der hier steht"
"...";"text der hier steht"
im Vergleich zu
Code: Alles auswählen
"...";"text der
hier steht"
"...";"text der hier steht"
Felder die fehlerhaft sind gibts nun mal immer wieder.
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Ja soweit ist mir das klar, angewendet auf dein Beispiel gibts halt wieder mehrere Datensätze:streetfox hat geschrieben:= 2 DatensätzeCode: Alles auswählen
"...";"text der hier steht" "...";"text der hier steht"
im Vergleich zu
= 2 Datensätze (multiline)Code: Alles auswählen
"...";"text der hier steht" "...";"text der hier steht"
Code: Alles auswählen
"that it
works ;"
Code: Alles auswählen
<feld anfang>"that it
works ;"<feld ende> <neuer datensatz (neue zeile ausserhalb feld)>
<feld anfang>as ""ss""<feld ende> <neuer datensatz>
<feld anfang>expected""<feld ende> <neuer datensatz>
<feld anfang>"And"<feld ende> <neuer datensatz>
Dies sollte aber nicht in einen Parser in der Standardbibliothek einfliessen.streetfox hat geschrieben:Felder die fehlerhaft sind gibts nun mal immer wieder.
joa das gleiche wo ich vorher immer reingefallen bin ...Oder was mach ich falsch?
Code: Alles auswählen
works ;" <selbes Feld, neue Zeile>
as "ss"
joa, versteh ich schon...drum fragte ich hier nach einer REGEX ^^Dies sollte aber nicht in einen Parser in der Standardbibliothek einfliessen.
1. Ich bin nicht Trundle. Immernoch nicht.streetfox hat geschrieben:@Trundel
.NET 3.5 SP1
2. Hab nun VB.net Express 2008 geladen (benutzt .net 3.5sp1). Hab eine kleine Applikation gebastelt mit einer Textbox und einem Button. Wenn ich deinen Text da reinkopiert und auf den button klicke, wird dein code benutzt. Danach geb ich mit einer for each schleife jedes element der liste aus. Aber leider ist da nur ein Element drin - dein RegEx funktioniert nicht. Entweder du zeigst mir deine Applikation, wo der RegEx tatsächlich funktioniert oder... keine Ahnung, es passt einfach nich oO' Weder mit IronPython noch mit C# noch mit VB.net krieg ich'ne Applikation um dieses RegEx zustande oO'' entweder bin ich wirklcih arg unfähig heute oder du hast dich vertan.
@streetfox: Auch Dein letztes Beispiel ist unstrittig denke ich, aber warum das hier ein Datensatz, statt zwei sein soll, ist eben unklar:
In der zweiten Zeile endet das mehrzeilige Feld und dann beginnt mit dem Zeilenende ein neuer Datensatz.
Wenn das nicht der Fall ist, würde ich's schon nicht mehr als CSV bezeichnen. Ich weiss es gibt keine allgemeingültige Definition, aber wenn's nicht von RFC4180 Common Format and MIME Type for Comma-Separated Values (CSV) Files abgedeckt ist, sollte es IMHO nicht in die Standardbibliothek.
Code: Alles auswählen
"that it
works ;"
as ""ss""
Wenn das nicht der Fall ist, würde ich's schon nicht mehr als CSV bezeichnen. Ich weiss es gibt keine allgemeingültige Definition, aber wenn's nicht von RFC4180 Common Format and MIME Type for Comma-Separated Values (CSV) Files abgedeckt ist, sollte es IMHO nicht in die Standardbibliothek.
nja...
ein feld mit quoted text endet immer auf "; und nicht auf ;". Es sei denn am Ende des Datensatzes. Hier ist zu überprüfen ob die Zeichenfolge "\n"*"; folgt. Tut sie das, ist dies das Ende des Datensatzes. Ansonsten nur LF im Feld. Denn im zweiten fall gehört das semikolon und die füsschen zum feldtext. Ergo ist auch die zweite zeile nicht das ende des feldes, nicht.
jep, geb ich unumwunden zu, schönes CSV würd ichs nicht nennen. Die idee mit der stdlib hab ich ja ned aufgebracht. Und warum die RE bei Vivi nicht klappt oO noch rätselhafter
ein feld mit quoted text endet immer auf "; und nicht auf ;". Es sei denn am Ende des Datensatzes. Hier ist zu überprüfen ob die Zeichenfolge "\n"*"; folgt. Tut sie das, ist dies das Ende des Datensatzes. Ansonsten nur LF im Feld. Denn im zweiten fall gehört das semikolon und die füsschen zum feldtext. Ergo ist auch die zweite zeile nicht das ende des feldes, nicht.
jep, geb ich unumwunden zu, schönes CSV würd ichs nicht nennen. Die idee mit der stdlib hab ich ja ned aufgebracht. Und warum die RE bei Vivi nicht klappt oO noch rätselhafter