2014-05-04 132 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