【发布时间】:2015-05-10 16:13:20
【问题描述】:
我正在使用 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模块做到呢?
【问题讨论】:
-
请注意,您应该使用
\.而不是.,因为它是一个特殊字符。 -
我将其声明为原始字符串,因此它会忽略所有特殊内容
-
这是一个特殊的正则表达式字符(如
^和$),而不是转义字符(如\)。用127r0h0x0检查一下,你会发现它也通过了