LINUX.ORG.RU

Регэксп для поиска строк идущих подряд

 


0

1

Надо искать в тексте таблицы типа таких

| Страна | Столица |
| ------ | ------- |
| Франция | Париж |
| Япония | Токио |
| Индия | Нью-Дели |


3 или больше строк идущих подряд, в каждой должно быть 3 или больше символа |


text = """Вот пример таблицы с двумя столбцами

| Страна | Столица |
| ------ | ------- |
| Франция | Париж |
| Япония | Токио |
| Индия | Нью-Дели |

Вот пример таблицы с двумя столбцами
"""
#pattern = r'(.*\|.*\|.*\|.*\n){3,}' # так находит одну строку из конца таблицы
pattern = r'.*\|.*\|.*\|.*\n' # так находит несколько строк (и только если в них ровно 3 |?)

matches = re.findall(pattern, text, flags=re.M)
for table in matches:
    print(table)

★★

Ответ на: комментарий от upcFrost

Зачем регулярка? Есть какое-то дополнительное условие?

Никаких условий, надо искать в текстах таблицы оформленные как то так.
Если не регулярка то что?

theurs ★★
() автор топика
Ответ на: комментарий от theurs

Можно наверное регуляркой каждую строку проверять, и складывать строки идущие подряд. Это вариант на случай если не прокатит с одной регуляркой.

theurs ★★
() автор топика
Ответ на: комментарий от theurs

Если не регулярка, то код. Итерируемся по строкам, ищем строку начинающуюся с «| -» и заканчивающуюся «- |». Сплитим строку по символу «|», это даст количество столбцов. Предыдущая строка это заголовок, все последующие начинающиеся с «|» - тело таблицы. Каждую строку сплитим по «|», проверяем на соответсвие заголовку. Это будет пару десятков строк на питоне.

FishHook
()