【问题标题】:extract digit from a string including minus sign python从包含减号python的字符串中提取数字
【发布时间】:2017-03-04 14:56:31
【问题描述】:

我在一个列表中有多个字符串,例如 /Date(-31431600000)/

我正在尝试提取包括减号在内的数字并将其转换回日期。该字符串表示一个 linux EPOCH 日期

我试过了:

import datetime as dt
date_list = ["/Date(-31431600000)/", "/Date(-31431600000)/"]
[dt.datetime.fromtimestamp(int(filter(lambda x: x.isdigit(), y)) / 1000) for y in date_list]`

但它错过了减号。

谢谢!

【问题讨论】:

    标签: python regex list datetime


    【解决方案1】:

    我认为这里最安全的正则表达式是:

    (?:/Date\()(-?\d+)(?:\)/)
    

    从这里您还要检查它是否以/Date( 开头,以)/ 结尾,并且前面只有一个可选的减号。然后,您可以使用以下方式获取日期:

    >>> import re
    >>> rgx=re.compile(r'(?:/Date\()(-?\d+)(?:\)/)')
    >>> rgx.match("/Date(-31431600000)/").group(1)
    '-31431600000'
    

    因此,您可以使用int(..) 将其转换为int

    >>> int(rgx.match("/Date(-31431600000)/").group(1))
    -31431600000
    

    【讨论】:

      【解决方案2】:

      尝试使用以下正则表达式

      (?<=Date\()-\d+(?=\))
      

      regex demo

      python (demo)

      import re
      regex = r"(?<=Date\()-\d+(?=\))"
      str = "/Date(-31431600000)/"
      matches = re.finditer(regex, str)
      for matchNum, match in enumerate(matches):
          matchNum = matchNum + 1
          print ("{match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group())) # -31431600000
      

      【讨论】:

        【解决方案3】:

        r'[^-0-9]' 删除除-0-9 数字之外的所有字符。

        [re.sub(r'[^-0-9]','',x) for x in date_list]
        

        【讨论】:

          猜你喜欢
          • 2018-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-21
          • 2020-01-11
          • 1970-01-01
          • 2021-03-19
          • 1970-01-01
          相关资源
          最近更新 更多