如何删除python中的日期格式子字符串?

如何删除python中的日期格式子字符串?,python,date,pandas,substring,Python,Date,Pandas,Substring,我正在尝试清理一些数据,并想检查字符串中是否有日期格式。如果有日期格式,我想删除它 例如,我有如下输入: “午夜10-22-13高清” 我还想删除HD,检查末尾是否有日期,并将其与其他解析(如冒号后的条带字符)一起删除 def func(value): str(value) if ":" in value: return value.split(":", 1)[0] if value.endswith('HD'): return value

我正在尝试清理一些数据,并想检查字符串中是否有日期格式。如果有日期格式,我想删除它

例如,我有如下输入: “午夜10-22-13高清”

我还想删除HD,检查末尾是否有日期,并将其与其他解析(如冒号后的条带字符)一起删除

def func(value):
    str(value)
    if ":" in value:
        return value.split(":", 1)[0]
    if value.endswith('HD'):
        return value[:-3]
    else:
         return value
我不想假设字符串是最后一个,而是假设它是6位数的非限定格式,然后返回带日期的值

我将这些函数应用于数据帧系列中的值

 data["LongTitleAdjusted"] = data["Long Title"].apply(func)
以下是一些输入示例:

Stand-Up: "Weird Al" Yankovic   
Stand-Up: "Weird Al" Yankovic HD    
Doug Benson 3 HD    
Midnight 11-14-13   
Midnight 11-14-13 HD    
Midnight 01-06-14   
Midnight 01-06-14 HD    
Midnight 01-07-14  
预期产出:

Stand-Up
Stand-Up
Doug Benson 3
Midnight 
Midnight 
Midnight 
Midnight 
Midnight 
解决方案 使用正则表达式匹配日期模式并替换它

import re

def func(x):
    return re.sub(r'(.*)\d{2}[-/]\d{2}[-/]\d{2}(.*)', r'\1\2', x)
试试这个:

lines = [
'Stand-Up: "Weird Al" Yankovic',   
'Stand-Up: "Weird Al" Yankovic HD',    
'Doug Benson 3 HD',    
'Midnight 11-14-13',   
'Midnight 11-14-13 HD',    
'Midnight 01-06-14',   
'Midnight 01-06-14 HD',    
'Midnight 01-07-14'  
]

def clean_string(string):
    clean = string
    if ":" in string:
        clean = string.split(":")[0]
    else:
        if string.endswith(" HD"):
            string = string.replace(" HD", "")
        clean = string.split(" ")
        try:
            datetime.strptime(clean[-1], '%m-%d-%y')
            clean = string.replace(clean[-1], "")
        except ValueError:
            clean = string
    return clean
它实际上尝试将日期字符串转换为日期;这意味着它不会剔除无效日期(毕竟,它们可能是值)。如果您不关心这个问题,您可以用一个查找所有数字的正则表达式、str的
isdigit()方法或类似的方法来替换它

输出:

>>> for line in lines:
...     print clean_string(line)
... 
Stand-Up
Stand-Up
Doug Benson 3
Midnight
Midnight
Midnight
Midnight
Midnight
>>> 

你能给我们举一个例子,里面有
?另外,
str(value)
完全不起作用,我想你的意思是
value=str(value)
我试图找到各种不同的模式,然后删除它们。是的,我想在整个字符串中查找日期,然后返回不带日期的字符串。@KateLehman应该“午夜10-22-13 HD”返回“午夜”还是“午夜HD”?(piRSquared的regex解决方案目前返回“午夜HD”)。要做一个健壮的解决方案有很多事情需要考虑(所有的值都是空间分隔的吗?日期可以是字符串中的第一个元素吗?等等)。如果您发布了更多输入数据(正数和负数)和所需输出的示例,则会更容易。它应该会在午夜返回--如何在同一字符串上连续运行所有解析?是的,这是正确的。我得到了名称错误:全局名称“re”未定义。我尝试了:def func(value):str(value)return re.sub(r'(.*)d{2}[-/]\d{2}[-/]\d{2}(.*),r'\1\2',x)if:“in value:return value.split(“:”,1)[0]if value.endswith('HD'):return value[:-3]else:return value仍然有相同的名称error对不起,以前从未使用过rejex!这是genius谢谢@piRSquared