我正在使用re模块验证IP地址,这是我的模式:
"^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$"
有没有办法知道字符串 是否可以成为 潜在的匹配而无需模式化?例如:"127.0.0."
好或"10.0"
但"10.."
不好。我不是指re.match
函数,我想知道字符串是不匹配但可能是。
我需要一个能做类似这样的功能:
import re
p = re.potential("10.0","^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
print p # True
编辑:我想知道的是,如果我能识别潜在的匹配并使用它来限制wx.TextCtrl和wx.EVT_CHAR事件,我没想问我的模式。现在我已经像这样实现了它:
def OnChar(self,event):
"""event validation of ip"""
key = event.GetKeyCode()
text_value = event.GetEventObject().GetValue()
length = len(text_value)
numbers = True
point = True
if length:
if length>2 and '.' not in text_value[-1:-4:-1]:
numbers = False
elif text_value[-1] =='.':
point=False
if Keys.is_numeric(key) and numbers:
event.Skip()
if Keys.equal(key,'.') and point:
event.Skip()
if Keys.is_moves(key):
event.Skip()
这样用户输入的文本可能不是很好,但有没有办法用re模块做?
答案 0 :(得分:3)
如果我理解正确,那么在某种程度上,你想要一个能够成为 IP地址的表达式。只需选择部件:
^(?:\d{1,3}(?:\.\d{1,3}){0,2}(?:\.\d{0,3})?)?$
the Compose
newtype:这与12
,234.54
,23.53.12.5
和空字符串匹配,但不匹配34.34..4
或3546.34
。
编辑:谢谢Casimir et Hippolyte,减少嵌套。
答案 1 :(得分:1)
您可以使用re.match作为
执行此操作>>> if re.match(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "10.0") :
... print "Matched"
... else:
... print "Not Matched"
...
Not Matched
>>> if re.match(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "127.0.0.0") :
... print "Matched"
... else:
... print "Not Matched"
...
Matched
注意:re.match
函数对字符串执行整个搜索,因此安全地省略了锚点^
和$