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']