2009-09-11 11 views

Respuesta

291
[^,;]+   

No ha especificado la implementación de expresiones regulares que está utilizando. La mayoría de ellos tiene un método Split que toma delimitadores y los divide. Es posible que desee utilizar que uno con una clase "normal" (sin ^) carácter:

[,;]+ 
+6

Y la pregunta no especifica si se permite separadores adyacentes, por lo que el terminador '+' es un poco dudosa. –

+0

Obteniendo un error solo para punto y coma: la expresión regular sin terminar se encuentra con el final del archivo – Jaswinder

54

clases Uso de caracteres. Una clase de personaje que empiece por caret coincidirá con cualquier cosa que no esté en la clase.

[^,;] 
+1

Más sobre [clases de carácter negativas] (http://www.regular-expressions.info/charclass.html) – HEX

2

Utilice esta:

([^,;]*[,;])* 
+4

Eso requiere la coma o el punto y coma como un delimitador de campo, en lugar de un separador de campo. La diferencia importa al final de una 'línea' (u otra estructura de registro escaneada); por lo general, no desea insistir en una coma o punto y coma después del último campo. Si su motor regex es lo suficientemente potente, puede usar '' (?: ([^ ,;] *) (?: [^ ,;] | $)) ''(PCRE con paréntesis que no capturan). Las alternativas de una coma o punto y coma después del campo o el final del registro hacen que las cosas funcionen mejor. También considere si los campos vacíos están permitidos. –

+1

Finalmente, debe preocuparse por lo que realmente devuelve la captura: ¿realmente desea que se incluyan los separadores? Y si hay 10 campos en una línea, cuántos de ellos devuelve la notación de captura. –

+1

Tiene razón sobre todo eso, pero la razón por la que no concerté esas cosas en mi respuesta es que no sé qué idioma/biblioteca de RegEx pregunta el interrogador. Él puede estar usando "GREP". De todos modos, le agradezco que haya agregado esos comentarios para aclarar las cosas para él. :RE – NawaMan

Cuestiones relacionadas