我有两个字符串
root = 'svn\\456'
dir = 'svn\\456\\765'
pattern = re.compile('^'+root)
matched = pattern.match(dir)
我总是匹配无。但如果我喜欢以下
root = 'svn\\456'
dir = 'svn\456\\765'
pattern = re.compile('^'+root)
matched = pattern.match(dir)
我得到匹配为真。
抱歉,如果这是我在这里遗失的一件非常基本的事情。但我刚开始使用python。感谢。
答案 0 :(得分:1)
使用'svn\\456'
作为模式的问题是\
是一个需要转义的特殊字符,因此如果您将第一个模式更改为:'svn\\\\456'
,您将获得一场比赛:
import re
root = 'svn\\\\456'
dir = 'svn\\456\\765'
pattern = re.compile('^'+root)
matched = pattern.match(dir) # matched!
答案 1 :(得分:0)
您正在尝试使用文字字符串来创建正则表达式对象。它包含一个必须转义的特殊正则表达式字符。
您需要使用re.escape
功能。
这是IDEONE demo:
import re
root = r'svn\456'
dir = r'svn\456\765'
pattern = re.compile('^'+re.escape(root))
matched = pattern.match(dir)
print(matched)