¿Es posible usar Regex para hacer coincidir todas las líneas que tienen 2 palabras que no son iguales?
Entiendo que puedo usar \d+: ([,\w]+ )\1|(.+)/gm
Aquí es donde capturas las líneas con la misma palabra
Luego captura todo lo demás
Luego ejecuta la función para hacer algo solo con el grupo 2
Pero, ¿hay alguna manera de hacer coincidir solo las líneas que no son iguales?
1: 43.186 43.186
2: 296.531 296.531
3: 108086 108086
4: abcdef abcdef
5: Capture This
6: 497.802 497.802
7: 200,062 300,062
8: Not Same
9: 202232 252232
10: 4.324.452 4.324.452
Ejemplo:
let string = ` 1: 43,186 43,186 2: 296,531 296,531 3: 108086 108086 4: abcdef abcdef 5: Capture This 6: 497,802 497,802 7: 200,062 300,062 8: Not Same 9: 202232 252232 10: 4,324,452 4,324,452 `; let magicalRegex = /\d+: (This One) (Does not match this one)/gm; string.replace(magicalRegex, matched=>{ /*These are the matches I found master*/ ` 5: Capture This 7: 200,062 300,062 8: Not Same 9: 202232 252232 ` /*Run some special code*/ /*Return matched*/ }); First Second Third
isNum: Anything Must Match Second
Puede usar /^\d+:\s+(\S+)\s+(?!\1$)\S+$/gm regex para extraer las coincidencias y luego simplemente unir los elementos, vea la demostración de expresiones regulares y la demostración de JavaScript a continuación:
let string = `1: 43,186 43,186 2: 296,531 296,531 3: 108086 108086 4: abcdef abcdef 5: Capture This 6: 497,802 497,802 7: 200,062 300,062 8: Not Same 9: 202232 252232 10: 4,324,452 4,324,452`; let magicalRegex = /^\d+:\s+(\S+)\s+(?!\1$)\S+$/gm; console.log( string.match(magicalRegex).join("\n") ) La expresión regular ^\d+:\s+(\S+)\s+(?!\1$)\S+$ coincide
^ - comienzo de línea\d+ - uno o más dígitos: - dos puntos\s+ - uno o más espacios en blanco(\S+) - Grupo 1: uno o más caracteres sin espacios en blanco\s+ - uno o más espacios en blanco(?!\1$) - una búsqueda anticipada negativa que falla la coincidencia si hay un valor de Grupo 1 inmediatamente a la derecha hasta el final de la cadena\S+ - uno o más caracteres que no sean espacios en blanco$ - fin de línea.Para el caso de uso y los requisitos del OP, una expresión regular simple que coincida y capture un espacio que no sea en blanco (secuencia) separado por un espacio en blanco (secuencia) además debe garantizar la singularidad de cada contenido de nueva línea a través de una referencia inversa utilizada dentro de un lookahead negativo ... /^(\S+)\s+(?!\1).*/gm ...
console.log( `43,186 43,186 296,531 296,531 108086 108086 abcdef abcdef Capture This 497,802 497,802 200,062 300,062 Not Same 202232 252232 4,324,452 4,324,452`.match(/^(\S+)\s+(?!\1).*/gm) ); .as-console-wrapper { min-height: 100%!important; top: 0; } Y para que coincida completamente con el código de ejemplo del OP, se debe refinar la primera expresión regular de /^(\S+)\s+(?!\1).*/gm a /^(?:\d+\:\s*)(\S+)\s+(?!\1).*/gm agregando (?:\d+\:\s*) al anterior, que coincide con el patrón de dígitos, dos puntos y espacios en blanco al comienzo de cada nueva línea. ..
console.log( `1: 43,186 43,186 2: 296,531 296,531 3: 108086 108086 4: abcdef abcdef 5: Capture This 6: 497,802 497,802 7: 200,062 300,062 8: Not Same 9: 202232 252232 10: 4,324,452 4,324,452`.match(/^(?:\d+\:\s*)(\S+)\s+(?!\1).*/gm).join('\n') ); .as-console-wrapper { min-height: 100%!important; top: 0; }Bueno, si te entendí correctamente, la expresión regular se vería así
string regex = @"^(\w+)\s(?:(?!\1).)*$";Aquí está el violín: https://dotnetfiddle.net/0ueUKd Y marcado aquí: https://www.regexpal.com/