code: def _partialParseMeridian(self, s, sourceTime):
          
          parseStr = None
          chunk1 = chunk2 = ''
  
          # HH:MM(:SS) am/pm time strings
          m = self.ptc.CRE_TIMEHMS2.search(s)
          if m is not None:
  
              if m.group('minutes') is not None:
                  if m.group('seconds') is not None:
                      parseStr = '%s:%s:%s' % (m.group('hours'),
                                               m.group('minutes'),
                                               m.group('seconds'))
                  else:
                      parseStr = '%s:%s' % (m.group('hours'),
                                            m.group('minutes'))
              else:
                  parseStr = m.group('hours')
              parseStr += ' ' + m.group('meridian')
  
              chunk1 = s[:m.start()]
              chunk2 = s[m.end():]
  
              s = '%s %s' % (chunk1, chunk2)
  
          if parseStr:
              debug and log.debug('found (meridian) [%s][%s][%s]',
                                  parseStr, chunk1, chunk2)
              sourceTime = self._evalMeridian(parseStr, sourceTime)
  
          return s, sourceTime, bool(parseStr)
docs: test if giving C{s} matched CRE_TIMEHMS2, used by L{parse()}
  
          @type  s:          string
          @param s:          date/time text to evaluate
          @type  sourceTime: struct_time
          @param sourceTime: C{struct_time} value to use as the base
  
          @rtype:  tuple
          @return: tuple of remained date/time text, datetime object and
                   an boolean value to describ if matched or not