from dataclasses import dataclass
import html.entities
import unicodedata
import regex # pour le support de "\p{}"
@dataclass
class Caractere:
unicode: str
html: str
def __init__(self, name: str):
self.unicode = unicodedata.lookup(name)
codepoint = ord(self.unicode)
html_name = html.entities.codepoint2name.get(codepoint, f"#{codepoint}")
self.html = f"&{html_name};"
ESPACE_INSECABLE = Caractere(name="NO-BREAK SPACE")
ESPACE_FINE_INSECABLE = Caractere(name="NARROW NO-BREAK SPACE")
def assemble_regexes(*regexes):
return "|".join(regexes)
def build_regex(avant, apres):
# \p{} permet de reconnaître un caractère par sa catégorie Unicode
# "Zs" est la catégorie "Separator, space".
return (
rf"((?P{avant})"
+ rf"(\p{{Zs}}|{ESPACE_INSECABLE.html})"
+ rf"(?P{apres}))"
+ r"(?!(.(?!