2015-07-10 31 views
2

此模式有什么问题吗?如果只有一个斜杠开头,模式必须成功

不得匹配

re.search('^/',"//abc"): 
print"/------" 

必须匹配

re.search('^/',"/abc"): 
print"//------" 
+2

在这两种情况下,你的模式是 “行的开头,斜线”。这两个测试字符串在行首都有一个斜线,这就是两者匹配的原因。你问如何匹配“/ ...”但不是“// ...”?换句话说,“斜线,其次是斜线以外的任何东西”? –

回答

5

如果你想在一开始匹配一个/

re.search('^/[^/]',"//abc") 

^/[^/]'将匹配字符串开头的/但只有在/后面没有其他/^[]内否定了比赛,所以如果你想忽略多个字符说,无论是/? [您将创建集[^/?]这样既"/?abc""//abc"将不匹配。

您正在匹配任何以/开头的字符串,因此在逻辑上它与两者都匹配。

如果你想获得整个字符串,而不是只看到如果你得到一个匹配:

re.search('^/[^/].*',"/abc") 

如果你想更具体的比赛添加任何你想要的后[^/]

2

最简单的就是否定/第二个字符。注意:^的含义是“在字符串开始处”。在一个字符范围内,它意味着除了那些字符。

import re 
for s in ["//abc","/abc"]: 
    #[^/] will match anything not a '/' 
    pat = "^/[^/]" 
    hit = re.search(pat, s) 
    print "search(%s, %s)=>%s" % (pat,s,bool(hit)) 

输出:

search(^/[^/], //abc)=>False 
search(^/[^/], /abc)=>True 
相关问题