允许单词之间有空格的正则表达式

我想要一个正则表达式,防止符号,只允许字母和数字。下面的正则表达式工作得很好,但它不允许单词之间有空格。

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

例如,当使用这个正则表达式时,“HelloWorld”是可以的,但“HelloWorld”不匹配。

我如何调整它允许空格?

764146 次浏览

博士tl;

只要在你的字符类中添加一个空格。

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

,


现在,如果你想严格一点…

以上说法并不完全正确。由于*意味着零或更多,它将匹配以下所有通常不打算匹配的情况:

  • 空字符串""。
  • 一个完全由空格组成的字符串,“      ”
  • 以空格开头和/或结尾的字符串,“   Hello World  ”。
  • 单词之间包含多个空格的字符串,“Hello   World”。

起初我认为这些细节不值得讨论,因为OP问的是一个如此基本的问题,以至于严格似乎不是一个问题。现在这个问题已经很流行了,我想说……

...使用@stema的回答

在我看来(不使用\w),它翻译为:

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

(无论如何,请给@stema投票。)

关于这个(和@stema的)答案,有几点需要注意:

  • 如果你想在单词之间允许多个空格(例如,如果你想允许意外的双空格,或者如果你从PDF中复制粘贴文本),那么在空格后添加+:

    ^\w+( +\w+)*$
    
  • If you want to allow tabs and newlines (whitespace characters), then replace the space with a \s+:

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

    这里我建议默认使用+,因为,例如,Windows换行符由两个空格字符组成,顺序为\r\n,所以你需要+来捕获这两个字符

还是不行?

检查您使用的正则表达式的方言。在像Java这样的语言中,你必须转义反斜杠,即。 \\w\\s。在较老或更基本的语言和实用程序中,如sed\w\s是没有定义的,因此将它们分别用字符类如。[a-zA-Z0-9_][\f\n\p\r\t]写出来。

,


<一口> *我知道这个问题的标签是,但基于25,000+的观看量,我猜不仅仅是那些遇到这个问题的人。目前,它是谷歌搜索短语正则表达式空格词.的第一个搜索结果

试一试:

^(\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个单词后面跟着一个空格,加上一个没有空格的单词。并使整个东西可选,允许空字符串。

一种可能是将空格添加到您的字符类中,就像acheong87建议的那样,这取决于您对模式的严格程度,因为这也将允许字符串以5个空格开头,或者仅由空格组成。

另一种可能是定义一个模式:

我将使用\w,这在大多数正则表达式中与[a-zA-Z0-9_]相同(在一些正则表达式中是基于Unicode的)

^\w+( \w+)*$

这将允许至少一个单词的序列,并且单词用空格分隔。

^匹配字符串的开始

\w+匹配至少一个单词字符的序列

( \w+)*是一个重复0次或更多次的组。在组中,它期望一个空格后面跟着至少一个单词字符的系列

$匹配字符串的结尾

这在一开始就不允许有空间。但允许单词之间有空格。还允许在单词之间使用特殊字符。一个用于FirstName和LastName字段的良好正则表达式。

\w+.*$

这个方法对我很管用

([\w ]+)

这个正则表达式

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

将只允许单词之间有一个空格,不允许开头或结尾空格。

正则表达式解释如下:

  1. ^断言字符串开始的位置
  2. \w+匹配任意单词字符[a-zA-Z0-9_]
    1. 量词:+在1次和无限次之间,尽可能多的次数,根据需要回报[贪婪]
    2. < / ol >
    3. 1捕获组(\s\w+)* .
      1. 量词:*在0到无限次之间,尽可能多的次数,根据需要回馈[贪婪]
      2. 匹配任意空白字符[\r\n\t\f ]
      3. \w+匹配任意单词字符[a-zA-Z0-9_]
        1. 量词:+在一次和无限次之间,尽可能多的次数,根据需要回馈[greedy]
      4. .
    4. $断言字符串末尾的位置

只适用于字母:

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

对于字母数字值和_:

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

只需在正则表达式模式的末尾添加一个空格,如下所示:

[a-zA-Z0-9_ ]

它是我的正则表达式:@"^(?=.{3,15}$)(?:(?:\p{L}|\p{N})[._()\[\]-]?)*$"

我只是在正则表达式的末尾*之前添加了([\w ]+)

@"^(?=.{3,15}$)(?:(?:\p{L}|\p{N})[._()\[\]-]?)([\w ]+)*$"

现在字符串中允许有空格。

试试这个吧:

result = re.search(r"\w+( )\w+", text)

如果你正在使用JavaScript,那么你可以使用这个正则表达式:

/^[a-z0-9_.-\s]+$/i

例如:

/^[a-z0-9_.-\s]+$/i.test("") //false
/^[a-z0-9_.-\s]+$/i.test("helloworld") //true
/^[a-z0-9_.-\s]+$/i.test("hello world") //true
/^[a-z0-9_.-\s]+$/i.test("none alpha: ɹqɯ") //false

这个正则表达式的唯一缺点是字符串完全由空格组成。“;“;也会显示为true。

这个正则表达式只允许字母和空格:

^[a-zA-Z ]*$