此模式有什么问题吗?如果只有一个斜杠开头,模式必须成功
不得匹配
re.search('^/',"//abc"):
print"/------"
必须匹配
re.search('^/',"/abc"):
print"//------"
此模式有什么问题吗?如果只有一个斜杠开头,模式必须成功
不得匹配
re.search('^/',"//abc"):
print"/------"
必须匹配
re.search('^/',"/abc"):
print"//------"
如果你想在一开始匹配一个/
:
re.search('^/[^/]',"//abc")
^/[^/]'
将匹配字符串开头的/
但只有在/
后面没有其他/
,^
的[]
内否定了比赛,所以如果你想忽略多个字符说,无论是/
或?
[您将创建集[^/?]
这样既"/?abc"
和"//abc"
将不匹配。
您正在匹配任何以/
开头的字符串,因此在逻辑上它与两者都匹配。
如果你想获得整个字符串,而不是只看到如果你得到一个匹配:
re.search('^/[^/].*',"/abc")
如果你想更具体的比赛添加任何你想要的后[^/]
最简单的就是否定/第二个字符。注意:^的含义是“在字符串开始处”。在一个字符范围内,它意味着除了那些字符。
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
在这两种情况下,你的模式是 “行的开头,斜线”。这两个测试字符串在行首都有一个斜线,这就是两者匹配的原因。你问如何匹配“/ ...”但不是“// ...”?换句话说,“斜线,其次是斜线以外的任何东西”? –