Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

86
Views
Tratando de excluir la coincidencia cuando está rodeado en ambos lados por una determinada cadena

Lo que estoy buscando hacer es modificar una expresión regular (sabor JS) para que no coincida si el patrón está precedido y seguido por la misma cadena.

A modo de analogía simple, supongamos que quiero hacer coincidir todas las instancias de n que no están precedidas ni seguidas por e . Entonces, por ejemplo, la expresión regular no debe coincidir con la n en alkene , pero aún debe coincidir con la n en pen o nest , que solo tienen la e directamente adyacente a n en un lado, no en ambos.

La mayoría de los hilos antiguos que he visto tratando de encontrar una respuesta básicamente dicen "simplemente use miradas negativas", pero el problema es que (?<!e)n(?!e) no coincide con ninguna de esas entradas, porque el lookbehind y lookahead son procesados por el motor de expresiones regulares por separado, por lo que considera que cualquier condición es suficiente para excluir la coincidencia.

(La expresión regular real es (?<!¸ª)()(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a)(?!¸ª) y no coincide con la ɣʷ en t͡ʃe:h₁dɣʷo¸ªh₂¸ª , pero eso hace que el problema parezca mucho más difícil de explicar de lo que debería ser)

¿Cómo modifica una expresión regular para excluir solo patrones cuando están anidados?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

El patrón (?<!b)a(?!b) aquí debe reemplazarse con (?<!b(?=ab))a o a(?!(?<=ba)b) . El punto es llamar una búsqueda hacia adelante inversa o una búsqueda hacia atrás desde una búsqueda hacia atrás o una búsqueda hacia adelante.

Vea la corrección de su patrón (sin ninguna optimización) donde tomé la búsqueda anticipada, la pegué dentro de la búsqueda posterior después de ª , invertí la búsqueda anticipada (es decir, la hice positiva) y agregué todo el patrón antes de ¸ª en la búsqueda anticipada para poder llegar a la derecha ¸ª :

 (?<!¸ª(?!(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a)¸ª))()(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a)

O, si pones el lookbehind en lookahead:

 ()(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a)(?!(?<=¸ª(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a))¸ª)

Vea la demostración de expresiones regulares (y la demostración de expresiones regulares #2 ).

Siempre que su patrón sea simple, es mejor no repetir el patrón en las búsquedas, por lo general solo puede usar . o .{x} donde x representa el número de caracteres que puede coincidir con la parte del patrón que consume. Aquí, no está claro con cuántos caracteres puede coincidir el patrón, probablemente puede usar (?<!¸ª(?!.{1,2}¸ª))()(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a) , pero no tengo ningún caso límite para probar.

Mejorar esto aún más puede producir (?<!¸ª(?!.{1,2}¸ª))()(ɣʷ|[hr]₂|r₃|w|j)([eoøɑiɚyua]) ( demostración ).

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!