2014-05-04 174 views
0

我想簡化這個表達式(myExpr):簡化正則表達式

\s+#[A-z][A-Za-z0-9-_]+|^\s*#[A-z][A-Za-z0-9-_]+ 

所以我寫了這一點:

[\s+|^\s*](#[A-z][A-Za-z0-9-_]+) 

re.findall(myExpr,string) 

第一個正則表達式使用工作但不是最後一個。我在第二個中有錯嗎?

+1

'[\ S + |^\ s *]'是匹配空格,加號,管道字符的字符集,... – roippi

+0

請發佈'主題字符串'和所需輸出的示例。 –

回答

2

你需要圓括號(…),而不是括號[…]因爲後者表示一個字符類:

(\s+|^\s*)(#[A-Za-z][A-Za-z0-9-_]+) 

你也可以使用它作爲a+相當於aa*

(^|\s)\s*(#[A-Za-z][A-Za-z0-9-_]+) 
+0

如果Python支持它,你可以使用'\ w'而不是'[A-Za-z0-9_]'(根據'\ w'的定義)。我發現自己想知道OP的'A-z' - 雖然有效,但很可能是一個錯誤。 – usr2564301

+0

@Jongware哦,沒有注意到後者。實際上,這是一個常見的錯誤,因爲範圍'A'(0x41)到'z'(0x7A)不僅包含'A'-'Z'(0x41-0x5A)和'a'-'z'(0x61 (0x5B),'''''(0x5C),']'(0x5D),'^'(0x5E),'_'(0x5F)和'''( 0X60)。 – Gumbo

+0

@Gumbo謝謝,但這會在結果中創建兩個組。但這不是問題,我可以破解結果並提取第二組。 – 4m1nh4j1