2013-04-03 83 views
0

我想剝奪標點符號的字符串,我結束了使用澄清的re.findall()方法在python

re.findall(r"[\w]+|[^\s\w]", text) 

它工作正常,它並解決我的問題。我不明白的是括號內的細節和整個模式的事情。 r"[\w]+|[^\s\w]"究竟意味着什麼?我看着它在Python標準庫和它說:

re.findall(pattern, string, flags=0) 

返回所有非重疊的字符串模式的匹配,作爲 字符串列表。字符串從左到右掃描,匹配返回 找到的順序。如果該模式中存在一個或多個組,則 會返回組列表;如果模式 有多個組,這將是元組列表。空結果包含在結果 中,除非它們觸及另一場比賽的開始。

我不知道我是否得到這個,澄清對我來說有點模糊。任何人都可以請告訴我在這種情況下的模式意味着什麼,以及它在findall()方法中的定義是什麼?

+0

你想了解[regex](http://docs.python.org/3/howto/regex.html) – JBernardo

回答

1

要分解它,[]創建一個character class。你會經常看到類似[abc]的東西,它們會匹配a,bc。相反,您也可能會看到[^abc]將會匹配不是abc的任何內容。最後,你還會看到字符範圍:[a-cA-C]。這引入了兩個範圍,它將匹配a,b,c,A,B,C中的任何一個。

在這種情況下,你的角色類包含特殊的令牌。 \w\s\w匹配類似字母的任何內容。 \w實際上取決於您的區域設置,但它通常與[a-zA-Z0-9_]a-z,A-Z,0-9_範圍內的任何匹配項相同。 \s是相似的,但它匹配任何可以被認爲是空白的東西。

+表示您可以重複前一次匹配1次或多次。所以[a]+將匹配整個字符串aaaaaaaaaaa。在你的情況下,你匹配彼此相鄰的字母數字字符。

|基本上是「或」。匹配左邊的東西,匹配右邊的東西,如果左邊的東西不匹配。

0

\w表示字母數字字符加「_」。 \s表示包括「\ t \ r \ n \ v \ f」和空格字符「」的空格字符。因此,[\w]+|[^\s\w]表示僅包含單詞和「_」的字符串。