2009-08-02 12 views
1

Ich baue eine Mysql-Einfügung mit Regex.Entfernen Sie Zeilen, die mehr als X-Werte enthalten, mit Regex

Dies ist, was der Einsatz wie bisher aussieht:

(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), (#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), (#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#); 

In einer früheren Frage jemand hat mir geholfen, diesen regulären Ausdruck zu schreiben, um einen Wert zu löschen, die als Beispiel oben

var stripped30 = htstring30.replace(/\((?:[^#\n]*?#[^#\n]*?#[,\s]?){0,8}\)[,;]\s*/ig, ''); 
smalled ist

Dies wird die unten stehende Ausnahme entfernen und löschen, so dass ich nur die 9 Tabellen habe, die ich möchte.

(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#), 

Jetzt möchte ich im Grunde die gleiche Sache zu tun, aber dieses Mal löschen Sie alle Ausnahmen größer als 9 - Kann jemand mir bitte helfen, dies zu tun.

(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#, #text10#), 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#, #text10#, #text11#); 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#), 
(#text1#,#text2#,#text3#,#text4#,#text5#,#text6#, #text7#, #text8#, #text9#); 

So dass, wenn es eine Ausnahme größer als 9 ist, die ich löschen kann es

Antwort

1

Sie könnten diesen regulären Ausdruck, jede Zeile zu entfernen, die nicht mehr als 9 Einträge hat:

/^(?!\s*\((?:#[^#\n]*#(?:\s*,\s*#[^#\n]*#){8})\)[,;]\s*$).*/mg 
+0

Ich habe es versucht, aber es löschte alles/^ (?! \ S * \ ((?: # [^ # \ N] * # (?: \ S *, \ s * # [^ # \ n] * #) {8} \) [,;] \ s * $). * [^;];? $/Mg Ich habe einen Fehler bei der ersten Verwendung erhalten,/^ (?! \ S * \ ((? : # [^ # \ n] * # (?: \ s *, \ s * # [^ # \ n] * #) {8} \) [,;] \ s * $)). * [^; ];? $/mg und fügte eine schließende Klammer hinzu –

+0

@Gerald Ferreira: Korrigiert es. – Gumbo

+0

+1 Yup, dieses entfernt korrekt sowohl "zu lange" als auch "zu kurze" Aufzeichnungen. – ridgerunner

0

Sie folgendes könnte versuchen:

var stripped30 = htstring30.replace(/\((?:[^#\n]*?#[^#\n]*?#[,\s]?){10,}\)[,;]\s*/ig, ''); 

wo der Rohling nach dem 10, ind gibt an, dass es keine obere Grenze gibt.

edit:

my answer from the previous question verwenden, aber zu aktualisieren, wie ich zu Ihrem Beispiel haben oben produziert, für mich, gute Ergebnisse:

\(([\s]*#[^#]+#[\s]*,?){10,}\)[,;]* 

lassen Sie mich wissen, wie Sie ergehen.

+0

Hi AKF Ich habe deine Lösung und es versucht funktioniert auch nicht, obwohl es mir tatsächlich alle zeigt, die nicht zum Problem passen ... aber die löschen, die ich behalten möchte ... wenn es also umgekehrt werden könnte, könnte es tatsächlich funktionieren –

Verwandte Themen