Estoy trabajando en un archivo que contiene líneas con palabras clave y algunas líneas contienen palabras clave duplicadas.
Por ejemplo:
dangerous,dangerous,hazardous,perilous
Quiero decirle a Notepad ++ que quiero eliminar cada palabra duplicada por línea. Para este ejemplo dangerous,
se eliminaría:
dangerous,hazardous,perilous
Tengo un montón de líneas como esa y es por eso que estoy buscando una forma automatizada de hacer esto.
notepad++
text-editors
duplicate
Gabriel
fuente
fuente
dangerous,hazardous,dangerous,perilous
? En otras palabras, ¿las palabras duplicadas siempre están una al lado de la otra?Respuestas:
Puede usar una expresión regular para eliminar palabras duplicadas consecutivas en una línea, sin embargo, no creo que sea posible eliminar palabras duplicadas que no son consecutivas (por ejemplo
dangerous, hazardous, dangerous
).Use esta expresión regular en la ventana de reemplazo en Notepad ++, y no olvide seleccionar "Expresión regular" como la opción Modo de búsqueda a continuación:
Esta expresión regular eliminará todas las palabras duplicadas consecutivos - ya sea 2 palabras duplicadas o 10 palabras duplicadas de forma consecutiva:
\b(\w+)(?:,\s+\1\b)+
.La misma expresión regular sin comas sería:
\b(\w+)(?:\s+\1\b)+
(podría ser útil para otros usuarios).Si desea una expresión regular específicamente para sólo dos palabras duplicadas (dobles), utilice esta expresión regular:
(\b\w+\b)\W+\1
.Coloque esta expresión regular en el Reemplazar con caja para guardar una ocurrencia de la palabra (palabras de lo contrario todo repetidos serán eliminados):
${1}
.Estas expresiones regulares solucionarán una situación como la que describiste en tu pregunta como ejemplo. La primera expresión regular funcionará para cada número de palabras duplicadas (por ejemplo
dangerous, dangerous, dangerous, dangerous, hazardous
), mientras que la segunda versión solo funcionará para dos palabras duplicadas (por ejemplodangerous, dangerous, hazardous
).Nota: La expresión regular sólo se aplicará en el formato descrito en la pregunta, lo que significa que formatos como
two words, two words, anotherword
,two-words, two-words, anotherword
,three words expression, three words expression, anotherword
no será cambiado debido a la expresión regular no se aplicará a ellos.fuente
(\b\w+\b)\W+\1
para dos palabras duplicadas. Editaré mi respuesta. Las comas explican por qué la otra expresión regular no funciona.word, word, anotherword
. Sin embargo, tiene muchas instancias que son un poco diferentes, comocame across, came across
algunas y con 3 o 4 palabras. También hay palabras con'
likedon't
y hace las cosas más complicadas en el sistema Notege ++ regex . El sistema Notege ++ regex también es bastante molesto y limitado, por lo que la solución es usar regex en python (u otro idioma) o hacer expresiones regulares específicas del formato para Notepad ++.Aquí hay una manera de hacer el trabajo, esto reemplazará todas las palabras duplicadas, incluso si no son contiguas:
(?:^|\G)(\b\w+\b),?(?=.*\1)
LEAVE EMPTY
. matches newline
Explicación:
Dada una entrada como:
dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous
Tenemos:
fuente