add: правило для ×

This commit is contained in:
2026-03-19 13:16:40 +03:00
parent 465dd9e9e6
commit d092cbdb5c
5 changed files with 33 additions and 5 deletions

View File

@@ -3,7 +3,7 @@
import regex
import logging
from .config import CHAR_NDASH, STR_TO_SYMBOL_REPLACEMENTS
from .config import CHAR_NDASH, CHAR_NBSP, CHAR_TIMES, STR_TO_SYMBOL_REPLACEMENTS
logger = logging.getLogger(__name__)
@@ -20,6 +20,7 @@ class SymbolsProcessor:
# Паттерн для диапазонов: цифра-дефис-цифра -> цифра–цифра (среднее тире).
# Обрабатываем арабские и римские цифры.
self._range_pattern = regex.compile(pattern=r'(\d)-(\d)|([IVXLCDM]+)-([IVXLCDM]+)', flags=regex.IGNORECASE)
self._times_pattern = regex.compile(pattern=r'(?<=\d)(?P<pre>\s*)(?P<letter>[xхXХ])(?P<post>\s*)(?=\d)')
logger.debug("SymbolsProcessor `__init__`")
@@ -31,6 +32,14 @@ class SymbolsProcessor:
return f'{match.group(3)}{CHAR_NDASH}{match.group(4)}'
return match.group(0) # На всякий случай
def _replace_times(self, match: regex.Match) -> str:
# Встраивает CHAR_TIMES между цифрами и защищает его от переноса
pre = match.group('pre')
post = match.group('post')
before = CHAR_NBSP if pre else ''
after = CHAR_NBSP if post else ''
return f'{before}{CHAR_TIMES}{after}'
def process(self, text: str) -> str:
# Шаг 1: Выполняем простые замены из списка `STR_TO_SYMBOL_REPLACEMENTS` (см. config.py).
@@ -45,6 +54,7 @@ class SymbolsProcessor:
# Шаг 2: Обрабатываем диапазоны с помощью регулярного выражения.
# Эта замена более специфична и требует контекста (цифры вокруг дефиса).
processed_text = self._range_pattern.sub(self._replace_range, processed_text)
processed_text = self._times_pattern.sub(self._replace_times, processed_text)
return processed_text