【问题标题】:How to extract string through regex , when lookbehind strings are subset of each other当后向字符串是彼此的子集时,如何通过正则表达式提取字符串
【发布时间】:2021-07-21 07:13:47
【问题描述】:

我有一个类似“SHIPPED DATE 1-09-75”或“SHIPPED 2-03-54”的字符串。我想提取日期部分。 我使用的代码优先考虑一种情况 (SHIPPED),即使它后面是 (DATE)。

re.search(r'(?:(?<=DATE)|(?<=SHIPPED)).*','SHIPPED DATE 23-10-90')
Out: <re.Match object; span=(7, 21), match=' DATE 23-10-90'>

在这种情况下可以做什么?

【问题讨论】:

    标签: python regex string


    【解决方案1】:

    您可以在\bSHIPPED(?: DATE)? (\S+) 上执行正则表达式查找所有搜索,这将匹配SHIPPEDSHIPPED DATE 之后的日期。

    inp = "SHIPPED DATE 1-09-75 and SHIPPED 2-03-54"
    dates = re.findall(r'\bSHIPPED(?: DATE)? (\S+)', inp)
    print(dates)  # ['1-09-75', '2-03-54']
    

    【讨论】:

    • 编辑了问题...日期可能并不总是存在..但可以发货。
    【解决方案2】:

    如果您的意图只是提取日期。 下面的代码行返回任何格式的日期

    >>> re.search('\d{1,4}-\d{1,4}-\d{1,4}','SHIPPED DATE 3-10-1990')
    <re.Match object; span=(13, 22), match='3-10-1990'>
    

    【讨论】:

      【解决方案3】:
      str_pattern = r"[0-9]{1,4}[\_|\-|\/|\|][0-9]{1,2}[\_|\-|\/|\|][0-9]{1,4}"
      test_str = "SHIPPED 2-03-54"
      date_from_str = re.search(str_pattern, test_str)[0]
      

      上面的正则表达式会在字符串中的任何 fromat 中找到您的日期。您也可以在SHIPPED DATE 1-09-75 上进行测试。

      【讨论】:

        猜你喜欢
        • 2013-11-08
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        相关资源
        最近更新 更多