2009-10-16 275 views
11

在Python中。 r^[\ w *] $在正则表达式中, w *是什么意思?

这是什么意思?

+1

你的意思'R“^ \ W * $”' ? – 2009-10-16 08:30:17

+0

跟随劳伦斯的评论,这没有引号没有任何特别的意义。 – foosion 2009-10-16 11:03:12

+0

嘿@ S.Lott:你怎么知道这是作业? – 2009-10-16 11:04:53

回答

36

快速回答:匹配由单个字符,其中该字符是字母数字(字母,数字)的下划线(_)或星号(*)的字符串。

详细说明:

  • 的 “\w” 表示 “任何文字字符”,这通常意味着字母数字(字母,数字,而不管壳体的)加下划线(_)
  • 的 “^”,“锚点“指向字符串的开头,而”$“”锚点“指向字符串的末尾,这意味着在这种情况下,匹配必须从字符串的开始处开始并结束于字符串的结尾。
  • []表示一个字符类,意思是“匹配字符类中包含的任何字符”。

还值得一提的是,正常报价和转义规则的字符串,使其很难进入正则表达式(所有的反斜线将需要额外的反斜杠进行转义),所以在Python中有一个特殊的符号,其有其自己的特殊引用规则,允许对所有反斜杠进行适当的解释,这就是开始时的“r”。

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

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

+0

这是一个坏概念,但为了未来的读者,\ w是类的python等价物:[^ a-zA-Z0-9_]。正如你可以在这里看到的,至少对于Python 2.7.x到3.4.y来说,'*'不会涉及到这一点。如果正则表达式类[\ w *]会引入*作为文字caracter的无用重复(即没有特殊含义,因为它包含在表示类的方括号内)。 – Cbhihe 2016-02-02 16:06:36

+0

在Python 3中,'\ w'的定义默认情况下考虑了Unicode字符的定义,所以它比'[^ a-zA-Z0-9_]'更宽。有关血淋淋的细节,请参阅https://docs.python.org/3/library/re.html#module-re。 – Bevan 2017-06-19 01:35:03

0

\ w指的是0个或更多的字母数字字符和下划线。在你的情况下,*也是字符类中,所以[\ W *]将匹配所有的[A-ZA-Z0-9_ *](*为字面解释)

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

要报价:

\ d,\ w和\ s ---速记字符类匹配数字,单词字符和空格。可以在字符类内部和外部使用。

编辑响应修正评论

+0

不在上述正则表达式中。由于'*'在字符类中,因此它成为该类的成员。 – 2009-10-16 08:28:45

0

\ W等效于[A-ZA-Z0-9_]我不明白它后*或[]周围,因为\ w已经是一个类,*在类定义中是没有意义的。

1

正如exhuma所说,\ w是任何字级字符(字母数字为Jonathan澄清)。

然而,因为它是在方括号它会匹配:

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

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

  • 行首(^)
  • 后跟一个 单个字母数字字符或 星号
  • 后跟一个 线($)

的末尾,以便下面将匹配:

blah 
z <- matches this line 
blah 

blah 
* <- matches this line 
blah 
0

如上所述\ w表示任何单词。所以你可以在下面

view.aspx?url=[\w] 

,这意味着你可以拥有任何单词作为价值的环境中使用这种“URL =”参数

+0

\ w只匹配单个字符,而不是整个单词。您需要像+,*或{n,m}这样的量词来实际匹配整个单词(即多个单个字符) – 2009-10-16 08:40:07

相关问题