Finding whether a string starts with one of a list's variable-length prefixes

后端 未结 11 2154
傲寒
傲寒 2021-01-01 12:16

I need to find out whether a name starts with any of a list\'s prefixes and then remove it, like:

if name[:2] in [\"i_\", \"c_\", \"m_\", \"l_\", \"d_\", \"t         


        
11条回答
  •  孤独总比滥情好
    2021-01-01 12:49

    Regex, tested:

    import re
    
    def make_multi_prefix_matcher(prefixes):
        regex_text = "|".join(re.escape(p) for p in prefixes)
        print repr(regex_text)
        return re.compile(regex_text).match
    
    pfxs = "x ya foobar foo a|b z.".split()
    names = "xenon yadda yeti food foob foobarre foo a|b a b z.yx zebra".split()
    
    matcher = make_multi_prefix_matcher(pfxs)
    for name in names:
        m = matcher(name)
        if not m:
            print repr(name), "no match"
            continue
        n = m.end()
        print repr(name), n, repr(name[n:])
    

    Output:

    'x|ya|foobar|foo|a\\|b|z\\.'
    'xenon' 1 'enon'
    'yadda' 2 'dda'
    'yeti' no match
    'food' 3 'd'
    'foob' 3 'b'
    'foobarre' 6 're'
    'foo' 3 ''
    'a|b' 3 ''
    'a' no match
    'b' no match
    'z.yx' 2 'yx'
    'zebra' no match
    

提交回复
热议问题