Python正则表达式潜在匹配

时间:2015-05-10 16:13:20

标签: python regex

我正在使用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模块做?

2 个答案:

答案 0 :(得分:3)

如果我理解正确,那么在某种程度上,你想要一个能够成为 IP地址的表达式。只需选择部件:

^(?:\d{1,3}(?:\.\d{1,3}){0,2}(?:\.\d{0,3})?)?$

the Compose newtype:这与12234.5423.53.12.5和空字符串匹配,但不匹配34.34..43546.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函数对字符串执行整个搜索,因此安全地省略了锚点^$