Python Regex:如何匹配子字符串

时间:2018-04-04 09:01:29

标签: python python-2.7

我想创建正则表达式以匹配它们是否是命令的子字符串。

示例:configure terminal

如果至少匹配:conf t

我尝试使用:r'conf(igure)?\s*t(erminal)?' 但它符合" conf txxxxx"同样。 另外,它没有匹配" config t"

我的问题是我想创建类似这样的匹配。

匹配度: 配置 配置术语 conf t

不匹配: confmin tminal

如果匹配可选,则需要按顺序排列。

谢谢!

3 个答案:

答案 0 :(得分:1)

正则表达式不是一个非常好的解决方案,因为它不是特别适合这样的测试,也不容易配置,可维护和扩展。

最好是编写一个单独的函数,针对可能的匹配i测试单个输入m,如果

则返回True
  1. len(i) >= minimum_length_required
  2. i相同,与m的长度相匹配。
  3. 这适用于单字条目:

    def partialMatch(entry, full, minimum):
        return len(entry) >= minimum and entry == full[:len(entry)]
    
    >>> print (partialMatch('con', 'configure', 4))
    False
    >>> print (partialMatch('config', 'configure', 4))
    True
    >>> print (partialMatch('confiture', 'configure', 4))
    False
    

    但是多字命令需要更多的工作,因为必须检查每个单独的单词 - 并且,可能有一长串可能的命令。但是,一般的想法应该是这样的:

    def validate(entry, cmd_list):
        entry = entry.split()
        if len(entry) != len(cmd_list):
            return False
        for index,word in enumerate(entry):
            if not partialMatch(word, cmd_list[index].replace('#',''), cmd_list[index].find('#')):
                return False
        return True
    

    其中cmd_list包含允许的条目列表,#字符与最小条目文本的位置匹配。所以你可以做到

    >>> print (validate ('conf', ['conf#igure', 't#erminal']))
    False
    >>> print (validate ('conf t', ['conf#igure', 't#erminal']))
    True
    >>> print (validate ('configure t', ['conf#igure', 't#erminal']))
    True
    >> print (validate ('conf #', ['conf#igure', 't#erminal']))
    False
    

    (当然,您通常不会将有效命令存储在此调用本身中,而是存储在较长的列表中,并在其上循环以查找有效命令。)

答案 1 :(得分:0)

这是示例

s="conf fxxx "
if not s.find('conf t'):
    print('yes')
else:
    print('no')

答案 2 :(得分:0)

在这里详细阐述@ usr2564301评论,

bitor(cleared_pixels, secret)