我试图做端口名称的正则表达式匹配(例如:ETH1/2/3)端口的Python的正则表达式匹配命名
re.match('[eE][tT][hH](\d+)/(\d+)/(\d)', value)
其醒目eth1/2a/1
为错误,但不ēth1/2/1a
。
您能否请帮助。
我试图做端口名称的正则表达式匹配(例如:ETH1/2/3)端口的Python的正则表达式匹配命名
re.match('[eE][tT][hH](\d+)/(\d+)/(\d)', value)
其醒目eth1/2a/1
为错误,但不ēth1/2/1a
。
您能否请帮助。
发生这种情况是因为在第一种情况下2a
部分与您的正则表达式不匹配。而在第二种情况下,th1/2/1
完美匹配[eE][tT][hH](\d+)/(\d+)/(\d)
,另外一个符号并不重要。
如果你需要得到一些没有任何额外的符号尝试添加到您的模式$
匹配字符串的结尾。
re.match('[eE][tT][hH](\d+)/(\d+)/(\d)$', value)
改为尝试^[eE][tT][hH]\d+(?:\/\d+){2}$
。 Demo here
re.match会在输入字符串的开头搜索匹配项。由于eth1/2/1a
在开始时符合你的模式(直到字母a),它仍然会返回一个匹配。要停止该操作,需要在正则表达式的末尾放置边界,例如$
以确保在确定匹配之前已经消耗了所有输入字符串。
使用're.match',你不需要'^'。另外,'/'不必转义。 –
问题与我的正则表达式 - 不是说字符串结束。感谢大家指出的错误。 – prath