2012-08-05 35 views
8

Estoy tratando de hacer una expresión regular para que coincida con los caracteres de coma sin guardar en una cadena.regex - coincide con el carácter que no se escapó

La regla que estoy buscando es "Una coma no precedida por un número par de barras diagonales inversas".

casos de prueba:

True abc,abc 
False abc\,abc 
True abc\\,abc 
False abc\\\,abc 
True abc\\\\,abc 
False abc\\\\\,abc 

Me trataron de usar un negativo mirada detrás: (?<!(\\+)), pero Python me da error: look-behind requires fixed-width pattern.

+0

trate de usar cuerdas primas 'r '...' 'para declarar la expresión regular – JBernardo

+0

¿Por qué es el primer ejemplo verdadero? No ha escapado. ¿No puedes contar el número de barras y determinar si eso es par? – Ben

+0

@JBernardo Ya estoy usando cadenas sin formato. Estoy buscando personajes que no se hayan escapado, título actualizado para aclarar. – bcoughlan

Respuesta

18

probar este regex: (?<!\\)(?:\\\\)*,

Explicación:

(?<!\\) Matches if the preceding character is not a backslash 
(?:\\\\)* Matches any number of occurrences of two backslashes 
,   Matches a comma 
+0

Esto funciona. Donde puedo encontrar una explicación de esto? – bcoughlan

+2

Un pequeño problema es que el grupo de coincidencias contiene todas las barras diagonales anteriores. ¿Alguna solución para esto? – bcoughlan

+0

¿Por qué es eso un problema? Ya sabes que el último personaje del partido es la coma. – MRAB

Cuestiones relacionadas