2011-08-28 88 views
0
class MyTest: 

    a = re.compile('abc') 

    def testthis(self, fname): 
     print fname 
     if self.a.match(fname): 
      return 'yes' 
     else: 
      return 'no' 

如果我通过'testabc'testthis()然后它打印no。如果我将正则表达式更改为.*abc,那么它会打印出是。这是怎么回事?它试图匹配整个字符串吗?在我的Python类的正则表达式总是返回false

+1

而你的测试向量是...? –

+1

那么,你通过它的一些东西是什么? – Amber

+0

它应该匹配任何包含'abc'的'fname'。告诉我们它失败的原因。 (如果你希望它只匹配以* abc结尾的字符串*,则在末尾加上'$'。) –

回答

4

the docs从(重点煤矿):

re.match(pattern, string[, flags])

如果零个或多个字符在字符串匹配正则表达式模式的开始时,返回一个对应的MatchObject实例。如果字符串与模式不匹配,则返回None;请注意,这与零长度匹配不同。

也许你想要.search()来代替。

2

根据您添加到您的问题中留言,你发现打印此Python代码值no

import re 
class MyTest: 
    a = re.compile('abc') 
    def testthis(self, fname): 
     print fname 
     if self.a.match(fname): 
      return 'yes' 
     else: 
      return 'no' 

t = MyTest() 
print t.testthis('testabc') 

这让你吃惊,因为它会在Perl匹配。

这是因为与Python,match作品在开始串,不像Perl的地方m查找匹配字符串中的任何地方。 (在Java中,它的工作原理上整个字符串

1

如果你想使用正则表达式abc,并有与之相匹配testabc,你必须使用search而不是matchmatch只匹配字符串的开头; search匹配字符串中的任意位置。

相关问题