如何实现str.partition但是对于正则表达式

时间:2017-07-26 11:21:38

标签: python

str.partition具有以下功能,通常对解析字符串非常有用。我想要相同的功能,但扩展到python re.compile(...)对象。

何时包含字符串

>>> 'foo bar baz'.partition('bar')
('foo ', 'bar', ' baz')
>>> 'foo bar bar baz'.partition('bar')
('foo ', 'bar', ' bar baz')

何时不包含字符串

>>> 'foo bar baz'.partition('hi')
('foo bar baz', '', '')

1 个答案:

答案 0 :(得分:0)

这是我的解决方案,加上奖励rpartition

def re_partition(regex, s):
    match = regex.search(s)
    if match:
        return s[:match.start()], s[slice(*match.span())], s[match.end():]
    else:
        return (s, '', '')

def re_rpartition(regex, s):
    # find the last match, or None if not found
    match = None
    for match in regex.finditer(s):
        pass
    if match:
        return s[:match.start()], s[slice(*match.span())], s[match.end():]
    else:
        return ('', '', s)

它们都通过利用生成的match对象来切割原始字符串。