Как с помощью регулярных выражений извлечь отдельные элементы?

Как можно извлечь данные из квадратных скобок в виде отдельных элементов, если входные данные выглядят так: <br/> <br/> "сенсор-1 [86] скорость 85 сенсор-2 [44]. Фотоцентры 13 массы [86,13]  плотность [46]. Функц. [1].  ретиналь [13] фотоактивность [32] массы-2 [13,32]" <br/> <br/> Я использовал следующий код: <br/> <code class="python">res = re.findall(r'\[(.*?)\]', text)</code> <br/> и получил на выходе: <br/> <pre><code class="python">['86', '44', '86,13', '46', '1', '13', '32', '13,32']</code></pre> <br/> Однако меня смущает формат данных типа [86,13], которые возвращаются как '86,13'. <br/> <br/> Я пытался использовать регулярное выражение: <br/> <code class="python">r'\[\d{2}\]*?'</code> <br/> Это выдает '[86' для [86,13], что немного лучше, но не показывает '13]'. <br/> <br/> Как правильно составить выражение для того, чтобы получить отдельные элементы, включая числа, разделенные запятыми? <br/> <br/> Спасибо!
  • 24 апреля 2025 г. 23:35
Ответы на вопрос 2
Чтобы извлечь отдельные элементы из квадратных скобок, включая числа, разделенные запятыми, вы можете использовать регулярные выражения для более детального извлечения каждого числа. Сначала вы можете получить строку из квадратных скобок, а затем разбить ее на отдельные элементы, используя запятую как разделитель.

Вот как вы можете это сделать:

1. Используйте ваше текущее регулярное выражение `r'\[(.*?)\]'`, чтобы извлечь строки из квадратных скобок.
2. Затем, для каждой найденной строки, разбейте ее на отдельные элементы, используя метод строки `split(',')`, чтобы получить числа по отдельности.

Вот пример кода на Python:

```python
import re

text = "сенсор-1 [86] скорость 85 сенсор-2 [44]. Фотоцентры 13 массы [86,13]  плотность [46]. Функц. [1].  ретиналь [13] фотоактивность [32] массы-2 [13,32]"

# Шаг 1: Извлечь строки из квадратных скобок
matches = re.findall(r'\[(.*?)\]', text)

# Шаг 2: Разбить строки на отдельные элементы
result = []
for match in matches:
    # Разбиваем по запятой и убираем пробелы
    elements = [elem.strip() for elem in match.split(',')]
    result.extend(elements)

# Результат
print(result)
```

Этот код даст вам следующий результат:

```
['86', '44', '86', '13', '46', '1', '13', '32', '13', '32']
```

Каждое число, включая те, что записаны через запятую, теперь извлечено как отдельный элемент списка.
'\[(?:(\d+),(\d+)|(\d+))\]'
Похожие вопросы