【发布时间】:2009-10-16 08:23:41
【问题描述】:
这个正则表达式是什么意思?
^[\w*]$
【问题讨论】:
-
跟进 Laurence 的 cmets,这个没有引号其实并没有什么特别的意义。
-
嘿@S.Lott:你怎么知道这是作业?
-
这能回答你的问题吗? Reference - What does this regex mean?
这个正则表达式是什么意思?
^[\w*]$
【问题讨论】:
快速回答: ^[\w*]$ 将匹配由单个字符组成的字符串,其中该字符是字母数字(字母、数字)、下划线 (_) 或星号 (* )。
详情:
\w”表示“任何单词字符”,通常表示字母数字(字母、数字,不分大小写)加下划线 (_)^”“anchors”到字符串的开头,“$”“anchors”到字符串的结尾,这意味着,在这种情况下,匹配必须从字符串的开头和字符串的结尾。[] 表示字符类,意思是“匹配字符类中包含的任何字符”。还值得一提的是,字符串的正常引用和转义规则使得输入正则表达式变得非常困难(所有的反斜杠都需要用额外的反斜杠转义),所以在 Python 中有一个特殊的符号,它有自己的允许正确解释所有反斜杠的特殊引用规则,这就是开头的“r”的用途。
注意:通常星号 (*) 表示“0 或多个先前的事物”,但在上面的示例中,它确实不具有该含义,因为星号在字符类的内部,所以它失去了它的“特殊性”。
【讨论】:
* 不参与其中。如果是这样,正则表达式类 [\w*] 将引入 * 作为文字字符的无用重复(即没有特殊含义,因为它包含在表示类的方括号内。)。
\w 的定义默认考虑了 Unicode 字符定义,因此它比 [^a-zA-Z0-9_] 宽得多;有关血腥细节,请参阅docs.python.org/3/library/re.html#module-re。
re.match(r'\w', '*') == None
[])内询问\w 和*。您的代码示例与手头的问题的相关性为零。 re.match(r'^[\w*]$', '*') 实际上确实返回了一个匹配项。并感谢您的反对。
\w" 时,这是第一个 SO 结果。标题并没有真正暗示它是[\w*] 而不是\w。因此,很容易得到\w == [a-zA-Z_*]的印象。
正如 exhuma 所说,\w 是任何词类字符(乔纳森澄清的字母数字)。
但是因为它在方括号中,所以它会匹配:
所以整个正则表达式匹配:
所以下面会匹配:
blah
z <- matches this line
blah
或
blah
* <- matches this line
blah
【讨论】:
\w 指的是 0 个或多个字母数字字符和下划线。您的情况中的 * 也在字符类中,因此 [\w*] 将匹配所有 [a-zA-Z0-9_*] (* 被逐字解释)
见http://www.regular-expressions.info/reference.html
引用:
\d、\w 和 \s --- 匹配数字、单词字符和空格的简写字符类。可以在字符类内部和外部使用。
编辑已根据评论更正
【讨论】:
* 在字符类中,因此它成为该类的成员。
从这一行的开头,"Any number of word characters (letter, number, underscore)" 直到行尾。
我不确定为什么它在方括号中,因为如果您希望返回匹配的文本,则圆括号(例如“(”和“)”)是正确的。
【讨论】:
\w 等价于 [a-zA-Z0-9_] 我不理解它后面的 * 或它周围的 [],因为 \w 已经是一个类,而类定义中的 * 没有意义。
【讨论】:
如上所述,\w 表示任何单词。所以你可以在下面的上下文中使用它
view.aspx?url=[\w]
这意味着您可以将任何单词作为“url =”参数的值
【讨论】: