Как искать вхождения более одного пробела между словами в строке
1. this is a line containing 2 spaces
2. this is a line containing 3 spaces
3. this is a line containing multiple spaces first second three four
Все вышеперечисленное - допустимые совпадения для этого регулярного выражения. Какое регулярное выражение мне следует использовать?
Ответы:
ПРОБЕЛ (2 и более)
Вы также можете проверить, что до и после этих пробелов следуют слова. (не другие пробелы, такие как вкладки или новые строки)
то же самое, но вы также можете выбрать (захватить) только пробелы для таких задач, как замена
или увидите, что до и после пробелов есть что-нибудь, а не только символы слова (кроме пробелов)
источник
\w
означает «символы слова», то есть буквенно-цифровые символы и подчеркивание, но не другие символы, не являющиеся пробелами. Чтобы проверить отсутствие пробелов, используйте\S
(заглавную S). Кроме того, первый будет соответствовать только строкам, содержащим два или более пробелов и ничего больше.\S
, просто предпочитаю не полагаться на регистр символов для такой функциональности, его легче читать.\w[ ]{2,}\w
не будет соответствоватьword.<2 spaces>more words
или строка, полностью состоящая из пробелов.[^\s]([ ]{2,})[^\s]\w
будет терпеть неудачу в строках, которые начинаются с пробелов или строк вродеbla<2 spaces>.
...Простое решение:
Это соответствует всем вхождениям одного или нескольких символов пробела. Если вам нужно сопоставить всю строку, но только если она содержит два или более последовательных символа пробела:
Если пробелы не обязательно должны быть последовательными:
источник
.*
обычно жадный, а это означает , что он дойдет до конца тестируемой строки, и все , что следует, если есть обязательные символы, не будет совпадать. Обычно в этом случае рекомендуется добавить?
вот так.*?
. Это случилось со мной, используя PHP PCRE/^.*b.*$/
действительно совпадает"foobar"
, даже если вы ожидаете, что первый жадный уже.*
будет соответствовать всей строке.Это регулярное выражение выбирает все пробелы, вы можете использовать это и заменить его одним пробелом
пример на питоне
источник
Искать
[ ]{2,}
. Это найдет два или более соседних пробела в любом месте строки. Он также будет соответствовать начальным и конечным пробелам, а также строкам, полностью состоящим из пробелов. Если вы этого не хотите, посмотрите ответ Александра.На самом деле, вы можете опустить скобки, они просто для ясности (иначе повторяющийся пробел не так хорошо виден :)).
Проблема в
\s{2,}
том, что он также будет соответствовать символам новой строки в файлах Windows (где новые строки обозначаютсяCRLF
или\r\n
совпадают с\s{2}
.Если вы также хотите найти несколько вкладок и пробелов, используйте
[ \t]{2,}
.источник
more than one space between words in a line
. Как[ ]{2,}
между словами? Вы хоть вопрос читали?Вот мое решение
Это удалит все цифры, запятые и новые строки, но выберет среднее пространство, такое как набор данных
источник