【问题标题】:How to extract a sub-string between two characters?如何提取两个字符之间的子字符串?
【发布时间】:2021-01-17 02:26:14
【问题描述】:

我想提取my_list中的所有日期

my_list = ['FRE_5F_20200915-08u21m57s_ab', 'AY_C7_20200813-17u02m16s_ab', 'ALL_20200915-06u34m05s_ab', 'FF_20200816-11u21m44s_ab']

这是我的代码:

for file in my_list:
    find = re.search('_(.+?)-', file).group(1)
    print(find)

这是输出:

5F_20200915
C7_20200813
20200915
20200816

这是我的预期输出:

20200915
20200813
20200915
20200816

【问题讨论】:

  • _(.+?)- 点将匹配任何内容。你只想要数字。因为返回最长的行进字符串就是你得到 5F_20200915 的原因。最短的匹配是 20200915。
  • 没错,刚刚发现是的。谢谢

标签: python list search substring


【解决方案1】:

这可以在没有正则表达式的情况下完成:

for s in my_list:

    # find the index of -
    index = s.index("-")

    # extract 8 characters before that
    print(s[index-8:index])

【讨论】:

    【解决方案2】:

    修复了您的正则表达式,您的输出与您的正则表达式匹配。要仅匹配 _- 之间的数字,您可以使用 '_(\d+)-',如下所示

    import re
    my_list = ['FRE_5F_20200915-08u21m57s_ab', 'AY_C7_20200813-17u02m16s_ab', 'ALL_20200915-06u34m05s_ab', 'FF_20200816-11u21m44s_ab']
    for file in my_list:
        find = re.search('_(\d+)-', file).group(1)
        print(find)
    

    结果

    20200915
    20200813
    20200915
    20200816
    

    【讨论】:

      【解决方案3】:

      你可以使用_(\d+)-Regex101:

      import re
      
      
      my_list = ['FRE_5F_20200915-08u21m57s_ab', 'AY_C7_20200813-17u02m16s_ab', 'ALL_20200915-06u34m05s_ab', 'FF_20200816-11u21m44s_ab']
      r = re.compile(r'_(\d+)-')
      
      for s in my_list:
          m = r.search(s)
          if m:
              print(m.group(1))
      

      打印:

      20200915
      20200813
      20200915
      20200816
      

      【讨论】:

      • 谢谢你似乎有效,你能告诉我你到底做了什么吗?
      • @NorthAfrican _(\d+)- 模式将搜索字符 _- 之间的所有数字 (0-9)。见这里regex101.com/r/JHweC1/1
      • 啊好吧它工作完美但是我认为goldwave的答案更容易一点!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 2013-12-11
      • 1970-01-01
      • 2022-01-26
      • 2019-10-26
      • 1970-01-01
      相关资源
      最近更新 更多