ТЛ; др
Просто добавьте пробел в свой класс персонажа .
^[a-zA-Z0-9_ ]*$
Теперь, если вы хотите быть строгим ...
Выше не совсем правильно. Из-за того, что это *
означает ноль или более , он будет соответствовать всем следующим случаям, которые обычно не будут совпадать:
- Пустая строка "".
- Строка, состоящая исключительно из пробелов, "".
- Строка, которая приводит и / или тянется с пробелами "Hello World".
- Строка, содержащая несколько пробелов между словами «Hello World».
Первоначально я не думал, что такие детали стоит того, чтобы о них рассказывать, так как ОП задавал такой простой вопрос, что строгость не была проблемой. Теперь, когда вопрос приобрел некоторую популярность, я хочу сказать ...
Который, в моем вкусе (без использования \w
) переводится как:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(Пожалуйста, upvote @stema независимо.)
Несколько замечаний по поводу этого (и @ stema's) ответа:
Если вы хотите разрешить использование нескольких пробелов между словами (например, если вы хотите разрешить случайные двойные пробелы или если вы работаете с текстом, вставленным при копировании из PDF), добавьте +
после пробела:
^\w+( +\w+)*$
Если вы хотите разрешить вкладки и символы новой строки (пробельные символы), замените пробел на \s+
:
^\w+(\s+\w+)*$
Здесь я предлагаю использовать +
по умолчанию, потому что, например, разрывы строк в Windows состоят из двух пробельных символов в последовательности \r\n
, поэтому вам нужно будет использовать +
оба.
Все еще не работает?
Проверьте, какой диалект регулярных выражений вы используете. * В таких языках , как Java , вы будете иметь , чтобы избежать ваши обратные слэши, ИЭ \\w
и \\s
. В более старых или более основных языках и коммунальных услугах, как sed
, \w
и \s
не определены, поэтому их выписывать с классами символов, например [a-zA-Z0-9_]
, и [\f\n\p\r\t]
, соответственно.
* Я знаю, что этот вопрос помеченvb.net, но исходя из 25 000+ просмотров, я предполагаю, что не только те люди, которые сталкиваются с этим вопросом. В настоящее время это первое попадание в Google по поисковой фразе, слову регулярного выражения .
Одной из возможностей было бы просто добавить пробел в ваш класс символов, как предположил acheong87, это зависит от того, насколько вы строги в своем шаблоне, потому что это также позволило бы строку, начинающуюся с 5 пробелов, или строки, состоящие только из пробелов.
Другая возможность - определить шаблон:
Я буду использовать
\w
это в большинстве регулярных выражений так же, как[a-zA-Z0-9_]
(в некоторых это на основе Unicode)Это позволит серию, по крайней мере, из одного слова, и слова будут разделены пробелами.
^
Сопоставить начало строки\w+
Совпадение серии, состоящей как минимум из одного слова( \w+)*
группа, которая повторяется 0 или более раз. В группе ожидается пробел, за которым следует серия из не менее чем одного слова$
соответствует концу строкиисточник
^- (\w+( \w+)*)$
работает для меня.Этот работал для меня
источник
Попробуйте с:
Объяснение:
источник
ggggggggggggggggggggggggggggggggggggg;
, вашему регулярному выражению потребуется очень много времени, чтобы достичь результата из-за чрезмерного возврата.Я предполагаю, что вы не хотите, чтобы ведущий / конечный пробел. Это означает, что вы должны разделить регулярное выражение на «первый символ», «материал посередине» и «последний символ»:
или если вы используете Perl-подобный синтаксис:
Кроме того: если вы намеренно сформулировали свое регулярное выражение, что оно также допускает пустые строки, вы должны сделать все это необязательным:
Если вы хотите разрешить использование только одного пробела, это выглядит немного иначе:
Это соответствует 0..n словам, за которыми следует один пробел, плюс одно слово без пробела. И делает все это необязательным, чтобы разрешить пустые строки.
источник
\s
не эквивалентны.\s
соответствует больше, чем просто пространство.Это регулярное выражение
будет позволять только один пробел между словами и без начальных или конечных пробелов.
Ниже приведено объяснение регулярного выражения:
^
Утвердить позицию в начале строки\w+
Подберите любой символ слова[a-zA-Z0-9_]
+
от одного до неограниченного количества раз, столько раз, сколько возможно, отдача по мере необходимости [жадный](\s\w+)*
*
от нуля до неограниченного количества раз, столько раз, сколько возможно, отдача по мере необходимости [жадный]\s
Совпадение с любым пробелом[\r\n\t\f ]
\w+
Подберите любой символ слова[a-zA-Z0-9_]
+
от одного до неограниченного количества раз, столько раз, сколько возможно, отдача по мере необходимости [жадный]$
Утвердить позицию в конце строкиисточник
Это не позволяет места в начале. Но позволяет пробелы между словами. Также учитывает специальные символы между словами. Хорошее регулярное выражение для полей FirstName и LastName.
источник
Только для алфавитов:
Для буквенно-цифрового значения и
_
:источник
Просто добавьте пробел в конец шаблона регулярного выражения следующим образом:
источник
Попробуйте это: (версия Python)
изменить верхний предел на основе вашего набора данных
источник
Хорошо посмотрел на многие из этих предполагаемых ответов ...
... и bupkis после очистки переполнения стека, а также других сайтов для регулярного выражения, которое соответствует любой строке без начального или конечного пробела и только с одним пробелом между строго символьными словами.
Таким образом, легко изменить буквенно-цифровой:
(Это не соответствует отдельным словам, а просто использует переключатель / if-else с простым,
^[a-zA-Z0-9]+$
если вам нужно дополнительно поймать отдельные слова.)наслаждайся: D
источник
[(?<=\d\s]
соответствует один символ:(
,?
,<
,=
, цифра или символ пробела, и это не может быть то , что вы имели в виду. Если это должно было быть взглядом сзади, это должно быть(?<=\d\s)
, но в этом нет никакого смысла; регулярное выражение никогда не совпадет.Я считаю, что это хорошо работает для "FullName":
источник
пытаться .*? чтобы пустые места это работало на меня
источник
.
соответствует всему. Это, скорее всего, не будет решением здесь.