@SocialCensus, L'esempio che ha dato nel commento al MarkusQ, dove si gettano nel ' accanto a ", non funziona con l'esempio MarkusQ ha dato sopra che se cambiamo sam a sam's: (test, una" virgola ", bob,", sam's ", qui) non ha alcuna corrispondenza con (,) (? = (?: [^ "'] | [" |'] [^ "'] ") $). In effetti, il problema è "Non mi interessa davvero le virgolette singole o doppie", è ambiguo. Devi essere chiaro cosa intendi citando o con "o con", ad esempio, è consentito il nesting o no? Se sì, a quanti livelli? Se solo 1 livello nidificato, cosa succede a una virgola al di fuori della citazione interna annidata ma all'interno della citazione di annidamento esterno? Dovresti anche considerare che le virgolette singole avvengono da sole come apostrofi (cioè, come il contro-esempio che ho dato in precedenza con Sam's).Infine, la regex che hai fatto non considera le virgolette singole alla pari con virgolette doppie poiché presuppone che l'ultimo tipo di virgolette sia necessariamente una virgoletta doppia - e anche la sostituzione dell'ultima virgoletta con ['| "] ha un problema se il testo non viene fornito con virgolette corrette (o se vengono utilizzati gli apostrofi), suppongo che probabilmente potremmo assumere che tutte le virgolette siano delineate correttamente.
L'espressione regolare di MarkusQ risponde alla domanda: trova tutte le virgole che hanno un numero pari di doppi apici dopo di esso (cioè, sono al di fuori delle virgolette doppie) e ignorare tutte le virgole che hanno un numero dispari di virgolette doppie (cioè, sono racchiuse tra virgolette doppie) .Questa è generalmente la stessa soluzione di quello che si vorrebbe, ma facciamo guarda alcune anomalie: in primo luogo, se qualcuno lascia una virgoletta alla fine, allora questa espressione regex trova tutte le virgole sbagliate piuttosto che trovare quelle desiderate o non riuscendo a corrispondere a nessuno. Ovviamente, se manca una virgoletta doppia, tutte le scommesse sono off poiché potrebbe non essere chiaro se quello mancante appartiene alla fine o invece appartiene all'inizio; tuttavia, esiste un caso legittimo e in cui la regex potrebbe fallire (questa è la seconda "anomalia"). Se modifichi l'espressione regolare per passare attraverso le righe di testo, allora dovresti sapere che la citazione di più paragrafi consecutivi richiede che tu inserisca una virgoletta singola all'inizio di ogni paragrafo e che lasci la citazione alla fine di ogni paragrafo eccetto che per fine dell'ultimo paragrafo. Ciò significa che nello spazio di quei paragrafi, la regex fallirà in alcuni punti e avrà successo in altri.
Esempi e brevi discussioni sulla quotazione di paragrafi e di quotazioni annidate sono disponibili qui http://en.wikipedia.org/wiki/Quotation_mark.
fonte
2011-05-10 11:43:56
Risposta finale ufficiale, data da MarkusQ: (,) (? = (?: [^ "'] | [" |'] [^ "'] *" * $) – SocialCensus
Come nota, questo non funziona interruzioni di riga di mid-quote. – SocialCensus
@SocialCensus vedere la mia nota allegata alla risposta. – MarkusQ