regexp znalezienie pojedyńczych "

0

Mam plik csv, nieststety niepoprawny, pomoże ktoś napisać wyrażenie które znajdzie " do neutralizacji

Przykład 1,"",""nazwa" rrr"
przykład 2,"tekst","inna "nazwa", i cos jeszcze"

Czyli mam kwalifikator tekstu " a w nim nieprawidlowe znaki ", możemy ograniczyć się do jednej linijki, chyba mnie izolacja dobija bo nie mogę stworzyć wyrażenia, które obejmie wszystkie przypadki, sam jednak z tych wyrażeń nie jestem dobry.

To co stworzyłem:

[^,"]"[^",]
0

A skąd wiesz które " masz znaleźć, bo przykłady nic nie mówią oprócz tego co jest (masz przykładowe wejście, ale nie wyjście). Też co rozumiesz przez "pojedynczy "", bo np.:

a,b
foo,"bar""baz"

Jest poprawnym CSV, które zawiera wartości:

a b
foo bar"baz
0

Modyfikując twój przykład to mam wartości:

a,b
foo,"bar"baz"

muszę znaleźć pojedynczy wewnetrzny "

znalzłem takie wyrażenie:

(?<!^)(?<!,)"(?!,|$)

Tylko, że wyszykuje poprawnie zneutrlizowane " a ja chce znaleźć te nie zneutralizowane

https://regex101.com/r/ACzb3R/2

0

Cos mi sie wydaje, że to nie jest problem na regexy, trzeba zbadać, czy te, " są poprawnie domknięte, tego regexy nie zrobią; kłania się:
https://talbrenev.com/2021/05/26/html-regex.html
z podlinkowanym klasykiem.

0

Regex który podałem wcześniej świetnie się sprawdził, zamieniam na tyldę wszystkie wewnętrzne cudzysłowy, a po zaciągnięciu do tabeli prosty replace.
Problem polega na tym, że źródłowa aplikacja nieprawidłowo generuje csv, a przy takich błędach mam puste wartości w imporcie danych.
I nie mówimy o domknięciu, tylko o tym że mamy unescaped (brakuje mi polskiego określenia) znaki

0

OK, może nie zrozumiałem tematu do końca, ale, póki co, podtrzymuje tezę, że to jest programistyczny problem - nie dla regexów.

0

"Naprawiłem" niepoprawny plik przy pomocy regex, więc problem rozwiązany. Możemy dyskutować czy to programistyczne czy nie ;)

0

Dla "Przykład 2" nadal nie otrzymujesz prawidłowego wyniku https://regex101.com/r/kLYhcb/1
Jak pisze @lion137 z wyrażeniami regularnymi może być problem, bo tu masz zagnieżdżanie, więc w przypadku ogólnym potrzebny jest licznik lub stos, czyli jakie byś wyrażenie nie napisał zawsze można stworzyć przykład, którego ono nie złapie.

0

@-daniel-: zgadza się. Nie mam jednak takiego przypadku w swoich danych. Ja potrzebowałem rozwiazania quick & dirty. Jak coś nie złapie to trudno, niech klient naciska źródło na wygenerowanie poprawnego CSV, to w jego interesie jest...

1 użytkowników online, w tym zalogowanych: 0, gości: 1