Как искать вхождения более одного пробела между словами в строке

Как искать вхождения более одного пробела между словами в строке

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

Все вышеперечисленное является действительным совпадением для этого регулярного выражения. Какое регулярное выражение я должен использовать?

 Sachin Shanbhag21 сент. 2010 г., 11:14
Вы пытаетесь проверить последовательные пробелы или все пробелы в этой строке?
 Sam21 сент. 2010 г., 14:11
пробелы между «содержащими и 2», «содержащими и 3», «первыми и вторыми», «вторыми и тремя» ... Да, я хочу сопоставить пробелы после точки и перед следующим словом.
 Sam21 сент. 2010 г., 11:22
последовательные пробелы не все пробелы
 Tim Pietzcker21 сент. 2010 г., 13:35
Что именно вы подразумеваете под "между словами"? В двух ваших примерах есть несколько пробелов между словом и цифрой. А как насчет пунктуации (например, хотите ли вы найти несколько пробелов после точки и перед следующим словом)? А как насчет пробелов до / после последнего символа в строке? Вы тоже хотите сопоставить вкладки? Как насчет строк, которые состоят только из пробелов?

Ответы на вопрос(4)

[ ]{2,}, Это найдет два или более соседних пробела в любом месте в пределах линии. Он также будет соответствовать начальным и конечным пробелам, а также линиям, которые полностью состоят из пробелов. Если вы не хотите этого, посмотрите ответ Александра.

На самом деле, вы можете опустить скобки, они просто для ясности (в противном случае повторяющийся символ пробела не так хорошо виден :)).

Проблема с\s{2,} является то, что он также будет совпадать с новыми строками в файлах Windows (где новые строки обозначеныCRLF или же\r\n что соответствует\s{2}.

Если вы также хотите найти несколько вкладок и пробелов, используйте[ \t]{2,}.

 AlexanderMP21 сент. 2010 г., 12:02
more than one space between words in a line, Как[ ]{2,} между словами? Вы вообще читали вопрос?
 Tim Pietzcker21 сент. 2010 г., 13:32
Вот почему я сослался на ваш ответ на случай, если ОП действительно хочет быть таким же строгим, как он пишет. Может быть, мы должны спросить его.

Простое решение:

/\s{2,}/

Это соответствует всем вхождениям одного или нескольких пробельных символов. Если вам нужно сопоставить всю строку, но только если она содержит два или более последовательных пробельных символа:

/^.*\s{2,}.*$/

Если пробелы не должны быть последовательными:

/^(.*\s.*){2,}$/
 AlexanderMP21 сент. 2010 г., 11:35
.* обычно жадный, что означает, что он достигнет конца тестируемой строки, и все последующие, если есть обязательные символы, не будут совпадать. Обычно в этом случае полезно добавить? , как это.*?, Это случилось со мной, используя PHP PCRE
 tdammers21 сент. 2010 г., 12:10
Это соответствует. «Жадность» означает, что она соответствует как можно большему количеству, и в то же время соответствует шаблону в целом./^.*b.*$/ на самом деле соответствует"foobar"даже если вы ожидаете первого жадного.* чтобы соответствовать всей строке уже.
Решение Вопроса
[ ]{2,}

Вы также можете проверить это до и после этих пробелов. (а не другие пробелы, такие как вкладки или новые строки)

\w[ ]{2,}\w

то же самое, но вы также можете выбрать (захватить) только места для таких задач, как замена

\w([ ]{2,})\w

или увидеть, что до и после пробела есть что-нибудь, а не только символы слова (кроме пробелов)

[^\s]([ ]{2,})[^\s]
 AlexanderMP21 сент. 2010 г., 11:45
нет особой причины. Сначала я подумал, что они мне нужны, поэтому я тащил их все время. На самом деле, вы правы, что я не прав, когда использую их в этом случае. Я отредактирую свой ответ прямо сейчас.
 AlexanderMP21 сент. 2010 г., 11:52
на данный момент неясно, о чем идет речь. Поиск пробелов только между словами (второе регулярное выражение), свободных пробелов (первое регулярное выражение) или пробелов между непробельными символами (последнее регулярное выражение). Только первое регулярное выражение проверяет пробелы, независимо от того, предшествуют ли они символам без пробелов (включая переводы строки). Я четко указал это в своем ответе. Вопрос был слишком расплывчатым, чтобы дать однозначный, однозначный ответ.
 AlexanderMP21 сент. 2010 г., 12:03
Пожалуйста, ПРОЧИТАЙТЕ вопрос.
 Tim Pietzcker21 сент. 2010 г., 11:48
\w[ ]{2,}\w не сможет соответствоватьword.<2 spaces>more words или строка, которая полностью состоит из пробелов.[^\s]([ ]{2,})[^\s]\w потерпит неудачу в строках, которые начинаются с пробелов или строк, таких какbla<2 spaces>....
 tdammers21 сент. 2010 г., 11:19
\w означает «символы слова», то есть буквенно-цифровые и подчеркивания, но не другие непробельные символы. Для проверки отсутствия пробелов используйте\S (заглавная S). Кроме того, первая будет соответствовать только тем строкам, которые содержат два или более пробелов и ничего больше.
 Tim Pietzcker21 сент. 2010 г., 11:43
Почему вы вообще используете якоря? Он ищет места, встроенные где-то в линии.
 AlexanderMP21 сент. 2010 г., 11:22
Я пытался развить вопрос. Я понял, что я пропустил то, что вы сказали с\SЯ просто предпочитаю не полагаться на регистр символов для такой функциональности, его легче читать.
 Tim Pietzcker21 сент. 2010 г., 12:07
Ты прав онявляется просить "между словами". Извините, и спасибо, что сообщили мне об этом. +1 за ваш ответ тогда, но вы все равно можете указать, что ваш второй и третий регулярные выражения не поймут первые и конечные пробелы. Что не может быть проблемой для ОП.

Вот мое решение

[^0-9A-Z,\n]

Это удалит все цифры, запятые и новые строки, но выберет среднее пространство, такое как набор данных

20171106,16632 ESCG0000018SB20171107,280 ESCG0000018SB20171106,70476 ESCG0000018SB

Ваш ответ на вопрос