Regex инвертировать выбор

Я немного огляделся, но не смог найти ответа на этот вопрос.

Я пытаюсь выбрать все из строки, кроме пробелов, которые повторяются определенное количество раз. Я нашел регулярное выражение для выбора пробелов, и то, на что я надеялся, было простым способом получить точную инверсию этого, но я еще не нашел способа сделать это. В конечном итоге я собираюсь реализовать это на Python, если это имеет значение.

Ниже моя тестовая строка, текущее регулярное выражение и ссылка на сайт тестирования регулярных выражений, который я использовал.

Текущее регулярное выражение

тестовая строка:

      'All: Day and Night                                                                                                                                                                                                                                             Vulnerabilities\\Personnel vulnerabilities\\Outdoor vulnerability                                                                                                                                                                                                1E-09                                                                                                                                                                                                                                                          /AvgeYear                                                                                                                                                                                                                                                      \x1a'

Регулярное выражение:

      [ ]{50,}

2 ответа

Решение

Вы можете сопоставить 1+ непробельных символов и, при желании, повторить 1-49 пробелов и 1+ непробельных символов.

      \S+(?:[ ]{1,49}\S+)*

См. Демонстрацию регулярных выражений | Демо Python

Пример

      from pprint import pprint
import re

regex = r"\S+(?:[ ]{1,49}\S+)*"
s = "All: Day and Night                                                                                                                                                                                                                                             Vulnerabilities\\\\Personnel vulnerabilities\\\\Outdoor vulnerability                                                                                                                                                                                                1E-09                                                                                                                                                                                                                                                          /AvgeYear                                                                                                                                                                                                                                                      \\x1a'"

pprint(re.findall(regex, s))

Выход

      ['All: Day and Night',
 'Vulnerabilities\\\\Personnel vulnerabilities\\\\Outdoor vulnerability',
 '1E-09',
 '/AvgeYear',
 "\\x1a'"]

Вы можете использовать то же регулярное выражение и просто re.sub ваш совпадение с одним пространством.

      re.sub(r'[ ]{50,}', ' ', string)
#'All: Day and Night Vulnerabilities\\Personnel vulnerabilities\\Outdoor vulnerability 1E-09 /AvgeYear \x1a'

Если вы хотите его в виде списка, просто используйте то же регулярное выражение и используйте re.split() вместо re.sub()

      re.split(r'[ ]{50,}', string)
#['All: Day and Night', 'Vulnerabilities\\Personnel vulnerabilities\\Outdoor vulnerability', '1E-09', '/AvgeYear', '\x1a']
Другие вопросы по тегам