【问题标题】:get a specific substring after and before a character in a string python在字符串python中的字符之后和之前获取特定的子字符串
【发布时间】:2015-12-10 10:38:12
【问题描述】:

我想从解密字符串中分割时间。 desc 可以有这种字符串:

desc = '08:59 Hudh aes ....' 
desc = '19:59Aksi jeh....' 
desc = 'just letters without time'
desc = '21.19:55Aksi hsue....'
desc = '256.08:59Aksi mane....'

time 包含 10 个描述的首字母 我想找到:,然后在它之前和之后取两个数字,这样我就可以分割时间了

time = ''.join(filter(lambda x: x, desc[0:10].replace(" " , "")))
print  "Time:" , time , time.rsplit(':', 1)[0]

time.rsplit(':', 1)[0]返回:之前的所有数字

time.rsplit(':', 1)[0]返回:之后的所有数字

如何定义在:之后和之前只拆分两个数字?这是一个好方法吗?使用正则表达式更好,我试过但有点复杂?

【问题讨论】:

    标签: python regex split string-split


    【解决方案1】:

    如何定义只拆分前后两个数字:

    使用正则表达式;以下正则表达式模式匹配 exactly 2 位数字,后跟一个冒号,然后是 exactly 两个数字(这就是您所要求的):

    import re
    
    desc = '21.19:55Aksi hsue....'
    m = re.search(r'(\d{2}):(\d{2})', desc)
    if m:
        hour, min = m.groups()
    else:
        # no time in desc string
        pass
    print 'hour = {}, min = {}'.format(hour, min)
    

    输出

    小时 = 19,分钟 = 55

    【讨论】:

      【解决方案2】:

      你可以试试re.finditer()

       test = """desc = '08:59 Hudh aes ....' 
       desc = '19:59Aksi jeh....' 
       desc = 'just letters without time'
       desc = '21.19:55Aksi hsue....'
       desc = '256.08:59Aksi mane....'
       """
       pattern = r"\d{2}:\d{2}"
       for m in re.finditer(pattern,test):
          print m.group()
      

      输出将是:

      08:59
      19:59
      19:55
      08:59

      然后,您可以从此输出轻松拆分小时和分钟

      【讨论】:

        【解决方案3】:

        你可以re.findall():

        re.findall(r'([\d.]+):([\d.]+)',desc)
        

        【讨论】:

          【解决方案4】:

          如果字符串彼此分开,您可以使用re.search 方法,如下所示:

          import re
          [hour, min, desc] = re.search(r'(?:(?:\d+\.)?(\d{2}):(\d{2}))?[ \t]*(.*)',desc).groups()
          
          # --
          # desc  = '08:59 Hudh aes ....'
          # hour -> '08'
          # min  -> '59'
          # desc -> 'Hudh aes ....', the space before the description are stripped too
          # --
          # desc  = '19:59Aksi jeh....'
          # hour -> '19'
          # min  -> '59'
          # desc -> 'Aksi jeh....'
          # --
          # desc  = 'just letters without time'
          # hour -> None
          # min  -> None
          # desc -> 'just letters without time'
          # --
          # desc = '256.08:59Aksi mane....'
          # hour -> '08'
          # min  -> '59'
          # desc -> 'Aksi mane....'
          

          Online regex demo

          【讨论】:

            猜你喜欢
            • 2022-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-09
            • 1970-01-01
            • 2015-06-06
            • 2012-09-16
            相关资源
            最近更新 更多