'Execute step on fragment
:type fragment: CaperFragment
:rtype : CaptureMatch'

def execute(self, fragment):

    match = CaptureMatch(self.tag, self)
    if self.regex:
        (weight, result, num_fragments) = self.capture_group.parser.matcher.fragment_match(fragment, self.regex)
        Logr.debug('(execute)    [regex]    tag:    "%s"', self.tag)
        if (not result):
            return match
        match.success = True
        match.weight = weight
        match.result = result
        match.num_fragments = num_fragments
    elif self.func:
        result = self.func(fragment)
        Logr.debug('(execute)    [func]    %s    +=    "%s"', self.tag, match)
        if (not result):
            return match
        match.success = True
        match.weight = 1.0
        match.result = result
    else:
        Logr.debug('(execute)    [raw]    %s    +=    "%s"', self.tag, fragment.value)
        include_separators = self.kwargs.get('include_separators', False)
        match.success = True
        match.weight = 1.0
        if include_separators:
            match.result = (fragment.left_sep, fragment.value, fragment.right_sep)
        else:
            match.result = fragment.value
    return match
