2 votos

Atajo iOS, regex coincide con estas palabras, mientras que excluye estas palabras

Estoy usando iOS Shortcuts y lo estoy usando para obtener el contenido de la página (convierte la página a RTF), luego lo paso por make text para convertirlo en texto plano.

Estoy intentando desarrollar una regex con sabor a IUC para buscar palabras/frases clave en una lista de páginas sobre las que estoy haciendo un bucle con un while cada una, pero quiero que la expresión regular excluya otras frases y evite un falso positivo.

Lo tengo configurado con dos grupos de captura. No estoy seguro de si se desea que el segundo grupo sea un grupo de no captura, o no intentar la captura en absoluto. Sólo creo que el segundo debe ser un grupo de captura, o de no captura para el AND lógico proporcionado. He leído que (esto)(aquello) actúa como un y, pero no estoy seguro de si cualquiera de los dos es un negado, si sigue esa lógica. Por esa razón, no estoy seguro de si el negado no debe ser su propio grupo de captura, grupo de no captura, o no debe ser el uso de los corchetes en absoluto. Había intentado algunas cosas de grupo de captura anidado, pero eso parece no seguir la sintaxis.

Actualmente, he probado una gran variedad de expresiones regulares. No tengo una lista completa, pero puedo compartir algunas permutaciones que he probado empezando por la más reciente:

(?>Include\sTerm\sOne|Include\sTerm\sTwo|Include\sTerm\s3)(?:<!Exclude\sTerm\sOne|Exclude\sTerm\sTwo|Exclude\sTerm\s3)

(?Include\sTerm\sOne|Include\sTerm\sTwo|Include\sTerm\s3)^(?!Exclude\sTerm\sOne|Exclude\sTerm\sTwo|Exclude\sTerm\s3)

Para que quede claro, quiero que primero busque los términos excluyentes y falle si encuentra alguno. Luego, si no encuentra ninguno de estos términos de negación, entonces comience a buscar en los términos de inclusión. Está bien que los términos de la lista de inclusión y de la lista de exclusión, respectivos a cada agrupación, se traten sobre una base OR (por tubería |) ya que ese es el comportamiento que busco. Por último, quiero empezar mi búsqueda en la parte superior de la página y que deje de buscar/intentar capturar en este orden lógico:

  • Excluir término encontrado, STOP -- Primer término de inclusión encontrado, STOP

Nota final, esta búsqueda se realiza obviamente sobre múltiples líneas. Sólo busco capturar el término de inclusión, no el de exclusión. Sólo quiero que el término de exclusión anule una coincidencia de ambos existe (ya sea antes o después - cruzar direccionalmente). Es decir, si existe un término de exclusión, negar el término positivo y proporcionar cero coincidencias.

0voto

Ryan Spears Puntos 1524

Una expresión regular no es un programa, sino un patrón de búsqueda muy complejo. En pocas palabras, lo único que puede hacer una expresión regular es coincidir o no coincidir, devolviendo la primera coincidencia que encuentre (incluyendo las subcoincidencias relacionadas, según sea el caso) en el primer caso, o nada en el segundo.

Esto significa que para implementar una lógica condicional de "aceptación o rechazo" en la que ambas ramas se basan en las coincidencias, una expresión regular es la herramienta equivocada. En su lugar, esa implementación debe hacerse programáticamente Aprovechando las expresiones regulares paso a paso:

  1. Primero busque una expresión regular de términos excluyentes (por ejemplo (No|Neither|…|Nope) ). Si se obtiene una coincidencia, se omite el documento y se pasa al siguiente.
  2. A continuación, busque una expresión regular de términos de inclusión (por ejemplo (Yes|Please|…|Thanks) ). Si se obtiene una coincidencia, se procesa el documento, si no, se omite el documento y se pasa al siguiente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X