Spaces:
Sleeping
Sleeping
| import re | |
| def extract_years(text): | |
| """ | |
| Извлекает сочетание числа и слова, указывающего возраст (например: '50 лет', '21 years'). | |
| """ | |
| # Регулярное выражение ищет числа и слова 'лет' или 'years' с учетом регистра | |
| match = re.search(r'\b(?<!\d)(\d{1,2})\s*(лет|years)\b', text, re.IGNORECASE) | |
| if match: | |
| # Приводим слово 'лет' или 'years' к исходному регистру | |
| return f"{match.group(1)} {match.group(2)}" | |
| return None | |
| def extract_production_year(text): | |
| """ | |
| Извлекает год производства (четырехзначное число в диапазоне 1900–2099) из строки. | |
| Например: '2019'. | |
| """ | |
| match = re.search(r'\b(19\d{2}|20\d{2})\b', text) | |
| if match: | |
| return match.group(1) | |
| return None | |
| def extract_alcohol_content(text): | |
| """ | |
| Извлекает содержание алкоголя из строки. | |
| Например: '40%'. | |
| """ | |
| match = re.search(r'(\d{1,2}(?:[.,]\d+)?\s*%)', text) | |
| if match: | |
| # Заменяем запятую на точку для единообразия (если нужно) | |
| return match.group(1).replace(' ', '').replace(',', '.') | |
| return None | |
| def is_volume(value): | |
| """ | |
| Проверяет, является ли значение валидным объемом (<= 10 литров). | |
| """ | |
| try: | |
| volume = float(value) | |
| return volume if volume <= 10 else None | |
| except ValueError: | |
| return None | |
| def extract_volume_or_number(text): | |
| """ | |
| Извлекает объем в литрах или число с плавающей точкой из строки. | |
| Например: '0,75л', '0.5', или '1,5 л'. | |
| """ | |
| # Попытка найти объем с буквой 'л' или без пробела перед ней | |
| match_with_l = re.search(r'(\d+(?:[\.,]\d+)?\s*[лЛ]|(?:\d+(?:[\.,]\d+)?[лЛ]))', text) | |
| if match_with_l: | |
| return is_volume(match_with_l.group(1).replace(',', '.').replace('л', '').replace('Л', '').strip()) | |
| # Если не найдено, ищем просто число с плавающей точкой | |
| match_number = re.search(r'(?<!№)\b(\d{1,2}(?:[\.,]\d+))\b(?!\s*(№|-er|er|\d{3,}))', text) | |
| if match_number: | |
| return is_volume(match_number.group(1).replace(',', '.')) | |
| return None | |