Соответствие шаблону регулярных выражений в Python - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь разделить данные

rest = [" hgod eruehf 10 SECTION 1. DATA: find my book 2.11.111 COLUMN: get me tea","111.2 CONTAIN  i am good"]

match = re.compile(r'(((\d[.])(\d[.]))+\s(\w[A-Z]+:|\w+))')
out = match.search(rest)
print(out.group(0))

Я обнаружил шаблон как «несколько десятичных цифр (например: 1. / 1.1. / 1.21.1 и т. Д.), За которыми следует символ до другого кратногодесятичная цифра (например: 1. / 1.1. / 1.21.1 и т. д.) "

Я хочу разделить данные на

  1. ДАННЫЕ: найти мою книгу

2.11.111 КОЛОННА: принеси мне чай

111.2 СОДЕРЖИТ, что я хорош

Есть ли способ разбить текстовые данные на основе шаблона.

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете получить ожидаемые совпадения, используя

import re
rest = [" hgod eruehf 10 SECTION 1. DATA: find my book 2.11.111 COLUMN: get me tea","111.2 CONTAIN  i am good"]
res = []
for s in rest:
    res.extend(re.findall(r'\d+(?=\.)(?:\.\d+)*.*?(?=\s*\d+(?=\.)(?:\.\d+)*|\Z)', s))

print(res)
# => ['1. DATA: find my book', '2.11.111 COLUMN: get me tea', '111.2 CONTAIN  i am good']

См. Демонстрационную версию Python

Регулярное выражение применяется к каждому элементу в списке rest и ко всемсовпадения сохраняются в res списке.

Pattern детали

  • \d+ - 1+ цифр
  • (?=\.) - должно быть . непосредственно справа от текущей позиции
  • (?:\.\d+)* - 0 или более повторений . и затем 1+ цифр
  • .*? - 0+ символов, кроме новой строки, как можно меньше
  • (?=\s*\d+(?=\.)(?:\.\d+)*|\Z) - до 0+ пробелов, 1+ цифр с . непосредственно справа от текущей позиции, 0или более повторений ., а затем 1+ цифр или конца строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...