2009-10-16 287 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

相關問題