Python Regex捕获单个字符的字母

时间:2014-04-08 05:31:28

标签: python regex alpha

为什么下面的正则表达式打印不正确?

print re.compile(r'^\b[a-z]\b$').search('(s)')

我希望匹配前后可能包含非字母数字字符的单个字母字母,但字符串中的任何位置都没有任何其他字母数字字符。所以以下内容应该匹配:

'b'
'b)'
'(b)'
'b,

以下内容应该是未命中的:

'b(s)'
'blah(b)'
'bb)'
'b-b'
'bb'

解决方案here不起作用。

2 个答案:

答案 0 :(得分:2)

开头的^和最后的$只有在整个字符串是单个字符时才会使表达式匹配。 (因此,它们会使每个\b过时。)删除锚点以匹配更大的字符串:

print re.compile(r'\b[a-z]\b').search('b(s)')

或者,只确保一个字符,如:

print re.compile(r'^\W*[a-z]\W*$').match('b(s)')

请注意,在第一种情况下,'b-b''blah(b)'会匹配,因为它们包含单个字母字符,而不会触及其中的其他字符。在第二种情况下,'b(s)'将不匹配,因为它包含两个字母字符,但其他四种情况将正确匹配,并且所有不匹配的情况将按预期返回None(错误逻辑值)

答案 1 :(得分:0)

好的,答案是:

print re.compile(^[(,\[]?[a-z][),;\]]?[,;]?$).search('(s)')

它捕获了单字符字母数字的各种复杂模式。我意识到这与我要求的不同,但实际上它更好。