¿Qué expresión regular coincidirá con todos los caracteres excepto la coma ',' o punto y coma ';'?


344

¿Es posible definir una expresión regular que coincida con todos los caracteres excepto un determinado carácter definido o conjunto de caracteres?

Básicamente, quería dividir una cadena por coma (,) o punto y coma (;). Así que estaba pensando en hacerlo con una expresión regular que coincidiría con todo hasta que encuentre una coma o un punto y coma.

Respuestas:


472
[^,;]+         

No ha especificado la implementación de expresiones regulares que está utilizando. La mayoría de ellos tienen un Splitmétodo que toma delimitadores y se divide por ellos. Es posible que desee utilizar ese con una ^clase de caracteres "normal" (sin ):

[,;]+

10
Y la pregunta no especifica si se permiten separadores adyacentes, por lo que el '+' final es un poco dudoso.
Jonathan Leffler

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

Tuve un requisito similar donde quiero evitar el punto y coma y la coma al final. Intenté mucho, pero no tengo éxito a continuación. Regex Estoy usando const regexDomain = / ^ (?: [A-Za-z0-9] (?: [A-Za-z0-9 -] {0,61} [A-Za-z0-9])? \.) + [A-Za-z0-9] [A-Za-z0-9 -] { 0,61} [A-Za-z0-9] / g; Bueno, valida si uso, y; en el medio, pero al final no se puede actualizar.
Harry

86

Usa clases de personajes. Una clase de personaje que comience con intercalar coincidirá con cualquier cosa que no esté en la clase.

[^,;]

2
Más información sobre las clases de caracteres negados
HEX

Tuve un requisito similar donde quiero evitar el punto y coma y la coma al final. Intenté mucho, pero no tengo éxito a continuación. Regex Estoy usando const regexDomain = / ^ (?: [A-Za-z0-9] (?: [A-Za-z0-9 -] {0,61} [A-Za-z0-9])? \.) + [A-Za-z0-9] [A-Za-z0-9 -] { 0,61} [A-Za-z0-9] / g; Bueno, valida si uso, y; en el medio, pero al final no se puede actualizar.
Harry


2

Utilizar este:

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

55
Eso requiere la coma o punto y coma como delimitador de campo, en lugar de como un separador de campo. La diferencia es importante al final de una 'línea' (u otra estructura de registro escaneada); normalmente, 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 sin captura). Las alternativas de una coma o punto y coma después del campo, o al final del registro, hacen que las cosas funcionen mejor. Considere también si se permiten campos vacíos.
Jonathan Leffler

1
Finalmente, debe preocuparse por lo que realmente devuelven las capturas: si realmente desea que se incluyan los separadores, y si hay 10 campos en una línea, cuántos de ellos son devueltos por la notación de captura.
Jonathan Leffler

1
Tiene razón sobre todo eso, pero la razón por la que no puse esas cosas en mi respuesta es que no sé qué idioma / biblioteca de RegEx pregunta el interlocutor. Él puede estar usando "GREP". De todos modos, agradezco que hayas agregado esos comentarios para aclararle las cosas. : D
NawaMan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.