【问题标题】:Remove dates from String using RegEx? [closed]使用正则表达式从字符串中删除日期? [关闭]
【发布时间】:2020-09-28 02:46:23
【问题描述】:

我有一个看起来像这样的字符串:

str_in = "Lemons: J2020, M2021. Eat by 9/03/28
    Strawberries: N2023, O2024. Buy by 10/10/20"

我怎样才能得到"J2020, M2021, N2023, O2024"

到目前为止,我所拥有的是非常硬编码的。它是:

str_in.replace("Lemon:","")
str_in.replace("Strawberries:", "")
str_in.replace("Buy by")

如果日期与指定的数字不同,我不知道如何删除日期。有没有我可以使用的 RegEx 表单?

【问题讨论】:

  • 好点,上面已经解决了。您能帮我找出一个不关注要保留的字符串而是关注要删除的字符串的解决方案吗?有时我会得到像 JU2021" 这样的值,所以只做 d{4} 是行不通的。
  • re.sub(r'\d+/\d+/\d+', '', str_in) 应该删除日期。

标签: python regex string numbers


【解决方案1】:

根据您的原始帖子和后续 cmets,您可以使用以下正则表达式显式获取要保留的字符串:\b[A-Z]+\d+\b。它允许 1 个或多个字母后跟 1 个或多个数字,以单个单词为界。将来要测试它和其他正则表达式,请使用this great online tool

这里最好使用正则表达式类的findall() 方法,因为它将返回此模式的所有实例。有关findall() 和其他类型匹配方法的更多信息,请查看this tutorial

将所有这些放在一起,代码将是:

values = re.findall(r'\b[A-Z]+\d+\b', str_in)

请务必先import re

【讨论】:

    【解决方案2】:

    我刚刚看到你编辑的问题,所以,这是我编辑的答案

    import re
    re_pattern = re.compile(r'(\w+),\s(\w+)\.')
    
    data = [ 'Lemons: J2020, M2021. Eat by 9/03/28',
             'Strawberries: N2023, O2024. Buy by 10/10/20',
             'Peaches: N12345, O123456. Buy by 10/10/20'
            ]
    
    for line in data:
        match = re_pattern.search(line)
        if match:
            print(match.group(1), match.group(2))
    

    【讨论】:

    • 如果您的模式实际上更复杂,请编辑您的问题。
    • 正如其他人所说,很难选择要删除的内容。
    【解决方案3】:
    import re
    
    string = "Lemons: J2020, M2021. Eat by 9/03/28 Strawberries: N2023, O2024. Buy by 10/10/20"
    
    array = re.findall(r"\b[A-Z]\d{4}\b", string)
    
    result = ','.join(array)
    

    结果字符串为“J2020, M2021, N2023, O2024”

    数组为['J2020', 'M2021', 'N2023', 'O2024']

    【讨论】:

      【解决方案4】:

      正则表达式匹配在所需文本的开头有 1 个或 2 个字符的可能性,然后匹配数字的后面部分。我认为 OP 有必要的信息,可以根据这些信息进行测试。

      import re
      
      str_in = "Lemons: J2020, M2021. Eat by 9/03/28 \
          Strawberries: N2023, O2024. Buy by 10/10/20"
      
      result = re.findall(r'([A-Z]{1,2}\d+)', str_in)
      
      print(result)
      

      【讨论】:

      • 我想我现在已经提供了一个更完整的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 2019-12-21
      • 1970-01-01
      • 2013-05-23
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多