Mach uns doch mal'ne schöne Applikation zurecht... Dann probieren wir die aus und analysierens und setzen es in IronPython umstreetfox hat geschrieben: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
VB.NET REGEX in Python - unexpected end of pattern
Gegenvorschlag:
Pfriemel die REGEX hier mal ein:
http://www.myregextester.com/index.php
übrigens ne tolle Seite!
(aktiviere VB.NET) lass die RE laufen.... du kriegst die richtigen Values immer im array [x][0] raus...
... bei python bin ich mittlerweile hier angelangt
aber auch die verschluckt sich, dafür funzt sie garantiert in python
Pfriemel die REGEX hier mal ein:
http://www.myregextester.com/index.php
übrigens ne tolle Seite!
(aktiviere VB.NET) lass die RE laufen.... du kriegst die richtigen Values immer im array [x][0] raus...
... bei python bin ich mittlerweile hier angelangt
Code: Alles auswählen
re.compile(r'"(?:""|[^"])*')
...Nein, es funktioniert nicht oO'
Bei mir zumindest nicht. Entweder ist dein RegEx im ersten Post falsch oder dein Text im .. 3ten Post von dir falsch kopiert. Keine Ahnung was, aber es kommt nur hühnerkacke heraus. Oder ich bin wirklich unfassbar unfähig im kopieren.
Klär mich auf, was mach ich falsch?
Bei mir zumindest nicht. Entweder ist dein RegEx im ersten Post falsch oder dein Text im .. 3ten Post von dir falsch kopiert. Keine Ahnung was, aber es kommt nur hühnerkacke heraus. Oder ich bin wirklich unfassbar unfähig im kopieren.
Code: Alles auswählen
Raw Match Pattern:
(?>([^,"]*("[^"]*")*[^,"]*)*)("[^"]*)?
VB.NET Code Example:
Imports System.Text.RegularExpressions
Module Module1
Sub Main()
Dim sourcestring as String = "replace with your source string"
Dim re As Regex = New Regex("(?>([^,""]*(""[^""]*"")*[^,""]*)*)(""[^""]*)?")
Dim mc as MatchCollection = re.Matches(sourcestring)
Dim mIdx as Integer = 0
For each m as Match in mc
For groupIdx As Integer = 0 To m.Groups.Count - 1
Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames(groupIdx), m.Groups(groupIdx).Value)
Next
mIdx=mIdx+1
Next
End Sub
End Module
Matches Found:
[0][0] = "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"
[0][1] =
[0][2] = " quotes"
[0][3] =
[1][0] =
[1][1] =
[1][2] =
[1][3] =
ach je, aus meinem 2ten post:, nich zickig werden, ja
!=
kein wunder kriegst du hühnergagge. ^^
/edit ....ich geh mal den post korrigieren. Anscheinend reicht es nicht nur drauf hinzuweisen
/edit2 sorry mir war das soooo offensichtlich... [^,]... wieso sollte jemand nach NICHT Komma bei Semikolon-separierten einträgen suchen x__X
sie versucht sehr unschöne csv files zu parsen, ich benutze sie mit ";"
Code: Alles auswählen
(?>([^,"]*("[^"]*")*[^,"]*)*)("[^"]*)? (mit Komma)
Code: Alles auswählen
(?>([^;"]*("[^"]*")*[^;"]*)*)("[^"]*)? (mit Semikolon)
/edit ....ich geh mal den post korrigieren. Anscheinend reicht es nicht nur drauf hinzuweisen
/edit2 sorry mir war das soooo offensichtlich... [^,]... wieso sollte jemand nach NICHT Komma bei Semikolon-separierten einträgen suchen x__X
Aber auch so is der RE nich das Wahre oO' Kommt viel Müll drumherum heraus, quoting fällt raus scheinbar usw... Ich würde echt darüber nachdenken, was eigenes zu parsen oder so oO
tjoo... drum bin ich hier im forum gelandet um zu gucken ob da jemand mehr weiss als ich, was ich oft annehme, da ich mit RE zwar schon einige Zeit arbeite aber mich nicht als crack bezeichnen würd. dafür issn forum ja da.
übrigens... hab sie nun umgeschrieben
führt zu
funzt jetzt auch in python... jetzt bin ich schon nah dran bis auf
det muss doch zum knacken sein?
übrigens... hab sie nun umgeschrieben
Code: Alles auswählen
;(?=(?:[^"]*"[^"]*")*(?![^"]*"))
Code: Alles auswählen
>>> 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"'''
>>> ptest = re.compile(';(?=(?:[^"]*"[^"]*")*(?![^"]*"))')
>>> re.split(ptest,text)
['"Value1;"', '"Value2"', '"""Value3"""', '"of ""very"" ""difficult"""', '""', '"expressions"\n"and"', '""', '"we should not ;""then""; forget"', '"that it\nworks ;"\nas ""ss""\nexpected""\n"And"', '"this ""is"""', '" a"', '"new start"\n"And2"', '"this is a"', '"new start as well"\n"only "this" line"', '" is malformat;ted "with" quotes"']
Code: Alles auswählen
..."\n"And"'
statt
..." ' , ' "And"'