为什么下面的正则表达式打印不正确?
print re.compile(r'^\b[a-z]\b$').search('(s)')
我希望匹配前后可能包含非字母数字字符的单个字母字母,但字符串中的任何位置都没有任何其他字母数字字符。所以以下内容应该匹配:
'b'
'b)'
'(b)'
'b,
以下内容应该是未命中的:
'b(s)'
'blah(b)'
'bb)'
'b-b'
'bb'
解决方案here不起作用。
答案 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)')
它捕获了单字符字母数字的各种复杂模式。我意识到这与我要求的不同,但实际上它更好。