/ / Regex Problema de búsqueda anticipada negativa: expresión regular, búsqueda anticipada negativa

Problema de Regex Negative Lookahead - expresión regular, mirada negativa

Creo que esto se llama anticipación negativa (nuevo en regex) en cualquier caso, no obteniendo los resultados que quiero. Estoy tratando de usarlo para descalificar o calificar a un grupo completo

(? (?! La | Cruz) (w +) Calle)

Así que quiero capturar el grupo STREET cuando es Main Street o Bank Street pero no The Street o Cross Street.

Lo que obtengo por la cadena "The Street" es

  • CALLE: "la calle"

igualmente para "Cross Street" me sale

  • CALLE: "calle ross"

Lo que estoy buscando no es una coincidencia, es decir, "Su patrón no coincide con la subcadena"

¿Hay alguna manera de usar anticipación negativa de esta manera? En otras palabras, AnyWord Street coincide con mi patrón, The Street y Cross Street no lo hacen y devuelven cero coincidencias y ningún valor para la etiqueta.

Respuestas

1 para la respuesta № 1

Usar el límite de palabras (b) te dará lo que quieres.

Ejemplo de Javascript:

/(?!The|Cross)(bw+ )Street/.test("Main Street")
// => true
/(?!The|Cross)(bw+ )Street/.test("Bank Street")
// => true
/(?!The|Cross)(bw+ )Street/.test("The Street")
// => false
/(?!The|Cross)(bw+ )Street/.test("Cross Street")
// => false

0 para la respuesta № 2

Su requerimiento es ambiguo. Ha escrito "Quiero capturar el grupo STREET cuando es Main Street o Bank Street pero no The Street o Cross Street".

Esta condición puede reducirse a

  1. "Quiero capturar el grupo STREET cuando es Main Street o Bank Street" o
  2. "Quiero capturar el grupo STREET cuando no es The Street o Cross Street".

Estas variantes son diferentes de otras.

Pero su ejemplo de código tiende a la segunda alternativa. Es por eso que una respuesta a continuación es para la segunda opción.

Los ejemplos corresponden a una sintaxis de Perl:

 /(?<!The|oss)s+Street/

Explicación: en Perl, mirar hacia atrás (? <= Fixed-regexp) solo funciona para expresiones regulares de ancho fijo. Por lo tanto, los caracteres "Cr" de "Cross" fueron eliminados.

El debilitamiento de la expresión regular de "Cruz" a "oss" se puede evitar de la siguiente manera:

 /(?<!The)(?<!Cross)s+Street/