2016-03-27 120 views
-1

我试图做端口名称的正则表达式匹配(例如:ETH1/2/3)端口的Python的正则表达式匹配命名

re.match('[eE][tT][hH](\d+)/(\d+)/(\d)', value) 

其醒目eth1/2a/1为错误,但不ēth1/2/1a

您能否请帮助。

+0

问题与我的正则表达式 - 不是说字符串结束。感谢大家指出的错误。 – prath

回答

1

发生这种情况是因为在第一种情况下2a部分与您的正则表达式不匹配。而在第二种情况下,th1/2/1完美匹配[eE][tT][hH](\d+)/(\d+)/(\d),另外一个符号并不重要。

如果你需要得到一些没有任何额外的符号尝试添加到您的模式$匹配字符串的结尾。

re.match('[eE][tT][hH](\d+)/(\d+)/(\d)$', value) 
2

改为尝试^[eE][tT][hH]\d+(?:\/\d+){2}$Demo here

re.match会在输入字符串的开头搜索匹配项。由于eth1/2/1a在开始时符合你的模式(直到字母a),它仍然会返回一个匹配。要停止该操作,需要在正则表达式的末尾放置边界,例如$以确保在确定匹配之前已经消耗了所有输入字符串。

+0

使用're.match',你不需要'^'。另外,'/'不必转义。 –