【问题标题】:In regex, what does [\w*] mean?在正则表达式中, [\w*] 是什么意思?
【发布时间】:2009-10-16 08:23:41
【问题描述】:

这个正则表达式是什么意思?

^[\w*]$

【问题讨论】:

  • 跟进 Laurence 的 cmets,这个没有引号其实并没有什么特别的意义。
  • 嘿@S.Lott:你怎么知道这是作业?
  • 这能回答你的问题吗? Reference - What does this regex mean?

标签: python regex syntax


【解决方案1】:

快速回答: ^[\w*]$ 将匹配由单个字符组成的字符串,其中该字符是字母数字(字母、数字)、下划线 (_) 或星号 (* )。

详情:

  • \w”表示“任何单词字符”,通常表示字母数字(字母、数字,不分大小写)加下划线 (_)
  • ^”“anchors”到字符串的开头,“$”“anchors”到字符串的结尾,这意味着,在这种情况下,匹配必须从字符串的开头和字符串的结尾。
  • [] 表示字符类,意思是“匹配字符类中包含的任何字符”。

还值得一提的是,字符串的正常引用和转义规则使得输入正则表达式变得非常困难(所有的反斜杠都需要用额外的反斜杠转义),所以在 Python 中有一个特殊的符号,它有自己的允许正确解释所有反斜杠的特殊引用规则,这就是开头的“r”的用途。

注意:通常星号 (*) 表示“0 或多个先前的事物”,但在上面的示例中,它确实具有该含义,因为星号在字符类的内部,所以它失去了它的“特殊性”。

有关 Python 中正则表达式的更多信息,两个官方参考是re module,正则表达式HOWTO

【讨论】:

  • 这是 necroposting,但为了以后的读者,\w 是类的 Python 等价物:[^a-zA-Z0-9_]。正如您在此处看到的,至少对于 Python 2.7.x 到 3.4.y,* 不参与其中。如果是这样,正则表达式类 [\w*] 将引入 * 作为文字字符的无用重复(即没有特殊含义,因为它包含在表示类的方括号内。)。
  • 在 Python 3 中,\w 的定义默认考虑了 Unicode 字符定义,因此它比 [^a-zA-Z0-9_] 宽得多;有关血腥细节,请参阅docs.python.org/3/library/re.html#module-re
  • 快速回答是高度误导re.match(r'\w', '*') == None
  • @MateenUlhaq 我不知道你想说什么,但我相信你错了。 OP 在括号表达式([])内询问\w*。您的代码示例与手头的问题的相关性为零。 re.match(r'^[\w*]$', '*') 实际上确实返回了一个匹配项。并感谢您的反对。
  • 让我改述一下:当搜索"python \w" 时,这是第一个 SO 结果。标题并没有真正暗示它是[\w*] 而不是\w。因此,很容易得到\w == [a-zA-Z_*]的印象。
【解决方案2】:

正如 exhuma 所说,\w 是任何词类字符(乔纳森澄清的字母数字)。

但是因为它在方括号中,所以它会匹配:

  1. 单个字母数字字符或
  2. 星号 (*)

所以整个正则表达式匹配:

  • 一个开始 行 (^)
  • 后跟一个 单个字母数字字符或 星号
  • 后面跟着一个 行 ($)

所以下面会匹配:

blah
z  <- matches this line
blah

blah
* <- matches this line
blah

【讨论】:

    【解决方案3】:

    \w 指的是 0 个或多个字母数字字符和下划线。您的情况中的 * 也在字符类中,因此 [\w*] 将匹配所有 [a-zA-Z0-9_*] (* 被逐字解释)

    http://www.regular-expressions.info/reference.html

    引用:

    \d、\w 和 \s --- 匹配数字、单词字符和空格的简写字符类。可以在字符类内部和外部使用。

    编辑已根据评论更正

    【讨论】:

    • 上述正则表达式中没有。由于* 在字符类中,因此它成为该类的成员。
    【解决方案4】:

    从这一行的开头,"Any number of word characters (letter, number, underscore)" 直到行尾。

    我不确定为什么它在方括号中,因为如果您希望返回匹配的文本,则圆括号(例如“(”和“)”)是正确的。

    【讨论】:

      【解决方案5】:

      \w 等价于 [a-zA-Z0-9_] 我不理解它后面的 * 或它周围的 [],因为 \w 已经是一个类,而类定义中的 * 没有意义。

      【讨论】:

        【解决方案6】:

        如上所述,\w 表示任何单词。所以你可以在下面的上下文中使用它

        view.aspx?url=[\w]
        

        这意味着您可以将任何单词作为“url =”参数的值

        【讨论】:

        • \w 只匹配单个字符,而不是整个单词。您需要像 +、* 或 {n,m} 这样的量词来实际匹配整个单词(即多个字符)
        猜你喜欢
        • 2012-06-10
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 2012-09-07
        相关资源
        最近更新 更多