Python模式匹配问题

时间:2015-10-23 16:58:43

标签: python regex

我有两个字符串

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。

感谢。

2 个答案:

答案 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)