Come una regola generale, direi: no.
data una stringa:
\"Burger\" \"Decaf\" shirt\"
Come si fa a decidere che \"
è superfluo (non-matching)? E 'questo dopo Burger
, uno dopo Decaf
o uno dopo shirt
? O uno prima di una di queste parole? Credo che la scelta sia arbitraria.
Sebbene in il proprio esempio specifico sembra che si desidera tutto il \"
che non sono adiacenti alla virgola.
Questi possono essere trovati seguendo regexp:
(?<!^)(?<![,\[])\\"(?![,\]])
Iniziamo con \\"
(backslash seguito da virgolette) al centro.
Quindi usiamo il lookahead negativo per scartare tutte le partite seguite da virgola o parentesi quadra chiusa.
Quindi usiamo il lookbehind negativo per scartare tutte le corrispondenze che si verificano dopo virgola o parentesi di apertura.
Il motore Regexp che ho usato non può far fronte all'alternanza all'interno di dichiarazioni di lookaround. Per ovviare a questo problema, traggo vantaggio dal fatto che i lookaround sono partite a lunghezza zero e io antepongo la ricerca negativa che corrisponde all'inizio della riga all'inizio dell'espressione.
Proof (in Perl):
$ cat test
"[\"my cars last night\",
\"Burger\",\"Decaf\" shirt\",
\"Mocha\",\"marshmallows\",
\"Coffee Mission\"]"
$ perl -n -e '$_ =~ s/(?<!^)(?<![,\[])\\"(?![,\]])/|||/g; print $_' test
"[\"my cars last night\",
\"Burger\",\"Decaf||| shirt\",
\"Mocha\",\"marshmallows\",
\"Coffee Mission\"]"
Forse [(?! <\ S * [[,] \ s *) (?! [, \]]) '" '] (http://regexstorm.net/tester?p=(%3f%3c!%5cs*%5b%5b%2c%5d%5cs*)%22(%3f!%5b%2c%5c%5d%5d) & i =% 5b% 22my + auto + ultima + night% 22% 2c% 0d% 0a% 22Burger% 22% 2c% 22Decaf% 22 + camicia% 22% 2c% 0d% 0a% 22Mocha% 22% 2c% 22marshmallows% 22% 2c% 0d% 0a% 22Coffee + Missione% 22% 5d & r =). –
@stribizhev Grazie mille. Funziona come un incantesimo per il sito di espressioni regolari che hai allineato, ma quando provo questo nel mio codice Ruby funziona diversamente e non lo raccoglie Credo che il Regex abbia una sincronizzazione diversa ascia per rubino per abbinarla. – 0bserver07