регулярное выражение, допускающее пробелы между словами

Мне нужно регулярное выражение, которое предотвращает символы и разрешает только буквы и цифры. Это регулярное выражение отлично работает, но оно не допускает пробелов между словами.

^[a-zA-Z0-9_]*$

например, при использовании этого регулярного выражения" HelloWorld "отлично, но" Hello World " не соответствует.

Как я могу настроить его, чтобы разрешить пробелы?

14 ответов


tl; dr

просто добавьте пробел в свой класс персонажа.

^[a-zA-Z0-9_ ]*$


теперь, если вы хотите быть строгой...

вышеизложенное не совсем правильно. Из-за того, что * означает ноль или больше, он будет соответствовать всем следующим случаям, которые обычно не означают совпадения:

  • пустую строку "".
  • строка, полностью состоящая из пространства."      " ,
  • строка, которая ведет и / или тропы с пробелами, " Hello World ".
  • строка, содержащая несколько пробелов между словами "Hello World".

...использовать @СТЭМа по ответ.

который, в моем вкусе (без использования \w) переводится как:

^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$

(пожалуйста, upvote @stema независимо.)

некоторые вещи, чтобы отметить об этом (и @СТЭМа) в ответ:

  • если вы хотите разрешить несколько пробелы между словами (скажем, если вы хотите разрешить случайные двойные пробелы или если вы работаете с копией вставленного текста из PDF), затем добавьте + после пространство:

    ^\w+( +\w+)*$
    
  • если вы хотите разрешить вкладки и новые строки (пробелы), замените пробел на \s+:

    ^\w+(\s+\w+)*$
    

    здесь я предлагаю + по умолчанию, потому что, например, Windows linebreaks состоят из два пробелы в последовательности символов,\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 это в большинстве вкусов regex то же самое, что [a-zA-Z0-9_] (в некоторых он основан на Unicode)

^\w+( \w+)*$

это позволит серии по крайней мере, одного слова и слова разделены пробелами.

^ соответствует началу строки

\w+ матч серии по крайней мере одного символа слова

( \w+)* это группа, которая повторяется 0 или более раз. В группе он ожидает пробел, за которым следует ряд хотя бы одного символа слова

$ соответствует концу строки


это сработало для меня

([\w ]+)

попробовать с:

^(\w+ ?)*$

объяснение:

\w             - alias for [a-zA-Z_0-9]
"whitespace"?  - allow whitespace after word, set is as optional

Я предполагаю, что вам не нужно ведущее/конечное пространство. Это означает, что вы должны разделить регулярное выражение на "первый символ", "материал в середине"и" последний символ":

^([a-zA-Z0-9_][a-zA-Z0-9_ ]*[a-zA-Z0-9_]$

или если вы используете Perl-подобный синтаксис:

^\w[\w ]*\w$

также: если вы намеренно сформулировали свое регулярное выражение, что оно также позволяет пустые строки, вы должны сделать все это необязательным:

^(\w[\w ]*\w)?$

если вы хотите разрешить только одиночные символы пробела, это выглядит немного разные:

^((\w+ )*\w+)?$

Это соответствует 0..n слов, за которыми следует одно пробел, плюс одно слово без пробелов. И делает все это необязательным, чтобы разрешить пустые строки.


Это не позволяет пространство в начале. Но допускает пробелы между словами. Также позволяет использовать специальные символы между словами. Хорошее регулярное выражение для полей FirstName и LastName.

\w+.*$

только для алфавитов:

^([a-zA-Z])+(\s)+[a-zA-Z]+$

для буквенно-цифрового значения и _:

^(\w)+(\s)+\w+$

это регулярное выражение

^\w+(\s\w+)*$

позволит только один пробел между словами и без начальных и конечных пробелов.

Ниже приведено объяснение регулярного выражения:

  1. ^ утвердить позицию в начале строки
  2. \w+ соответствует любому символу слова [a-zA-Z0-9_]
    1. Квантор: + между одним и неограниченное количество раз, столько раз, сколько возможно, отдавая по мере необходимости [жадный]
  3. 1-я группа захвата (\s\w+)*
    1. Квантор: * между нулевым и неограниченным временем, как можно больше раз, отдавая по мере необходимости [жадный]
    2. \s матч любой символ пробела [\r\n\t\f ]
    3. \w+ соответствует любому символу слова [a-zA-Z0-9_]
      1. Квантор: + между одним и неограниченное количество раз, столько раз, сколько возможно, отдавая по мере необходимости [жадный]
  4. $ утвердить позицию в конце строки

хорошо рассмотрел многие из этих предполагаемых ответов...

...и bupkis после очистки переполнения стека, а также других сайтов для регулярного выражения, которое соответствует любой строке без начального или конечного пробела и только один пробел между строго букву слова.

^[a-zA-Z]+[(?<=\d\s]([a-zA-Z]+\s)*[a-zA-Z]+$

таким образом, легко модифицируется в буквенно-цифровой:

^[a-zA-Z0-9]+[(?<=\d\s]([a-zA-Z0-9]+\s)*[a-zA-Z0-9]+$

(Это не соответствует одним словам, но просто используйте переключатель / if-else с простым ^[a-zA-Z0-9]+$ Если вам нужно поймать одного слова в дополнение.)

наслаждайтесь :D


попробуйте это: (версия Python)

"(A-Za-z0-9 ){2, 25}"

измените верхний предел на основе вашего набора данных


Я нахожу, что это хорошо работает для "полного имени":

([a-z',.-]+( [a-z',.-]+)*){1,70}/

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

 ^[^ ]+( [^ ]+)*$

просто добавьте пробел в конце шаблона регулярного выражения следующим образом:

[a-zA-Z0-9_ ]

попробовать .*? чтобы разрешить пробелы, это сработало для меня