regulares python3 online expresiones ejemplos abder python regex beautifulsoup regex-negation

python3 - findall python re



Expresión regular para encontrar un acrónimo y evitar palabras compuestas por ese patrón (1)

Estoy usando Python 2.7 y BeautifulSoup . Necesito encontrar un acrónimo como abc o abc y evitar los falsos positivos como qweabcrty . El patrón puede estar al principio de la cadena, al final, puede tener espacio, comillas, comillas dobles, guiones (y así sucesivamente) justo antes y después, pero no un carácter alfanumérico.

Vengo a esta expresión regular

[^/w]?a/.?b/.?c/.?[^/w]?

Eso está bien para

  • a B C
  • a B C
  • bla (abc)
  • abc-blah
  • bla-abc
  • bla, bla, bla
  • bla-abc-blah

Pero también se encuentra (y no quiero):

  • qweabcrty

Si elimino el ? después de ambos [^ / w] ya no encontrará el caso 1, 2, 4 y 5, porque espera encontrar algo antes y / o después.

Para resumir, cómo puedo especificar esto: abc puede ser cualquier cosa en la cadena PERO SI hay un personaje antes y / o después no debe ser un alfanumérico.

El código python se ve así:

import re from bs4 import BeautifulSoup, SoupStrainer html = """ <html> <a>abc</a> <a>a.b.c.</a> <a>blah (abc)</a> <a>abc-blah</a> <a>blah-abc</a> <a>blah abc blah</a> <a>blah-abc-blah</a> <a>qweabcrty</a> </html>""" links = BeautifulSoup(html, "lxml", parse_only=SoupStrainer(["a"])) tags = links.find_all("a", text = re.compile("[^/w]?a/.?b/.?c/.?[^/w]?", re.I)) print tags


Intenta usar el metacaracter de la palabra límite ( /b ):

html = """ <html> <a>abc</a> <a>a.b.c.</a> <a>blah (abc)</a> <a>abc-blah</a> <a>blah-abc</a> <a>blah abc blah</a> <a>blah-abc-blah</a> <a>qweabcrty</a> </html>""" import re print re.sub(r''/b(abc|a/./b./.c)/b'', ''@@@'', html)

huellas dactilares

<html> <a>@@@</a> <a>@@@.</a> <a>blah (@@@)</a> <a>@@@-blah</a> <a>blah-@@@</a> <a>blah @@@ blah</a> <a>blah-@@@-blah</a> <a>qweabcrty</a> </html>