es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Regex debe hacer match con una palabra (sin reemplazar) Y un patrón (para reemplazar) en una línea.

Con expresiones regulares (puede ser PCRE o SED, pero también Python [especifica, por favor]), quiero eliminar todas las ocurrencias de las líneas que contengan una sola letra seguida de una coma (/,.,/g) y la palabra “Labels:”.

Por ejemplo, en estas líneas:


Labels: K,ltemittel,System,j,Vakuum,s
Another tags: a,b,xxx,c,yyy,z

a

Labels: ltemittel,System,Vakuum
Another tags: a,b,xxx,c,yyy,z

Lo que he intentado:

  • Grupo de no captura (aún reemplaza también “Labels:”)
  • Búsqueda hacia adelante y hacia atrás (no se puede usar greedy)
  • Agrupando /(Labels:)*(,.,) (también capturando el no “Labels:”)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar todas las ocurrencias de líneas que contienen una sola letra seguida de una coma y la palabra “Labels:”, podemos usar la siguiente expresión regular en Python:

    import re
    
    text = """
    Labels: K,ltemittel,System,j,Vakuum,s
    Another tags: a,b,xxx,c,yyy,z
    Labels: x,y,Chemical substances,z
    """
    
    pattern = r"(?<!.)Labels:(?:.(?<!,.[^,]))*,\w(?!,)\s*"
    
    result = re.sub(pattern, "", text)
    
    print(result)
    

    Esto producirá la siguiente salida:


    Another tags: a,b,xxx,c,yyy,z

    Analicemos la expresión regular:

    • (?<!.)Labels: – esto coincide con “Labels:” siempre que no haya ningún carácter antes (búsqueda negativa hacia atrás).
    • (?:.(?<!,.[^,]))* – esto coincide con cualquier carácter múltiples veces, siempre y cuando no sea una coma de una sola letra seguida de un carácter que no sea una coma (búsqueda negativa hacia atrás), y no sea el último carácter antes de la coma. Esto coincide eficazmente con todos los elementos de la lista excepto el último.
    • , – esto coincide con la coma después de la lista.
    • \w(?!,)\s* – esto coincide con una palabra de una sola letra (por ejemplo, “j”), seguida de espacios en blanco opcionales, siempre y cuando no esté seguida de una coma (búsqueda negativa hacia adelante).

    Al reemplazar el patrón coincidente por una cadena vacía, eliminamos efectivamente toda la línea. Las afirmaciones de búsqueda negativa hacia atrás y hacia adelante aseguran que solo coincidamos con las líneas que contienen una sola letra seguida de una coma y la palabra “Labels:”.

Comments are closed.