Регулярное выражение для разделения каждого фрагмента текста менее чем на 2 пробела

Я пытаюсь проанализировать некоторые табличные данные в теге <pre> и пытаюсь найти правильный шаблон. Я хотел бы последовательно сопоставить все серии символов, разделенные не более чем одним пробелом.

Ввод: ' Not seasonally adjusted Seasonally adjusted (1) Latest'

Желаемый результат: ['Not seasonally adjusted', 'Seasonally adjusted (1)', 'Latest']

  1. Я попробовал отрицательный прогноз '[\S ]+(?!\s{2,})', который дает одно совпадение для всей текстовой строки.
  2. Я попробовал отрицатель '[^\s{2,}]', который соответствует каждому символу, не являющемуся пробелом, в текстовой строке.
  3. Я попробовал .*, за которым следовал отрицатель '.*[^\s{2,}]', который дает одно совпадение для всей текстовой строки.

ПРИМЕЧАНИЕ. Я использую Python и не хочу просто делать что-то вроде re.split('\s{2,}'), потому что мне не просто нужен содержащийся текст, но я хочу сохранить начальные и конечные символы каждый фрагмент текста, чтобы передать его в скрипт табличного синтаксического анализатора/интерпретатора.

Как я могу это сделать?

Попробуйте r'\b[^\b]*?(?=\s{2,}|$)'? Пример вашей заметки?

user24714692 15.06.2024 22:00

кстати, твой "негатор" делает не то, что ты думаешь: re.findall('[^\s{2,}]','{abc, def, 123}')

jhnc 15.06.2024 22:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
import re
re.findall("\S+(?: \S+)*", '                                                   Not seasonally adjusted                      Seasonally adjusted (1)                  Latest')

['Not seasonally adjusted', 'Seasonally adjusted (1)', 'Latest']

Для меня это хороший подход. Мне не хватало идеи использования группы без захвата. Спасибо!

user3787120 15.06.2024 22:14

Я использовал ``, потому что вы написали «пробел», но \s может быть более правильным, если нужно (или нет) обрабатывать другие виды пробелов. например \S+(?:\s\S+)* или [^ ]+(?: [^ ]+)*

jhnc 15.06.2024 23:56

Да, я понял эту часть. Спасибо. В итоге я использовал \S(?:(?!\s{2,}).)+ и \S(?:(?!\s{3,}).)+ в качестве запасного варианта для некоторых таблиц, в заголовках которых раздражает использование двойных пробелов.

user3787120 16.06.2024 02:46

Другие вопросы по теме

RegEx для проверки координат в различных форматах
RegEx для исключения двух строк без отрицательного просмотра
Регулярное выражение для соответствия необязательному префиксу, заканчивающемуся определенным символом
Шаблон регулярного выражения, позволяющий использовать буквенно-цифровые и квадратные скобки с текстом внутри него
Заменить первое вхождение серии из одного или нескольких пробелов в строке
Удалить части подстроки с помощью нескольких условий
Как мне получить номер телефона и расширение этого номера телефона, используя регулярное выражение
Java String.split(delim) оставляет пустую строку в начале, если исходная строка начинается с разделителя
Регулярное выражение для поиска имен файлов с определенными параметрами, но не с другими
Как получить текст из текущей строки в указанной позиции курсора до и после указанных граничных символов?