从包含名称+日期的字符串中提取日期

2024-06-26 13:30:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从一系列字符串中提取日期,如下所示:

'MIHAI MĂD2Ă3.07.1958'

或者

'CLAUDIU-MIHAI17.12.1999'

怎么做?你知道吗

试过这个:

for index,row in DF.iterrows():
    try:
        if math.isnan(row['Data_Nasterii']):
            match = re.search(r'\d{2}.\d{2}.\d{4}', row['Prenume'])
            date = datetime.strptime(match.group(), '%d.%m.%Y').date()
            s = datetime.strftime(datetime.strptime(str(date), '%Y-%m-%d'), '%d-%m-%Y')
            row['Data_Nasterii'] = s
    except TypeError:
        pass

Tags: 字符串indffordatadatetimedateindex
3条回答

可以将str访问器与正则表达式一起使用:

DF['Prenume'].str.extract(r'\d{1,2}\.\d{2}\.\d{4}')

您需要将dot (.)转义为\.,或者可以在字符类中使用它-“[.]”。它是正则表达式中的元字符,与任何字符都匹配。如果需要验证更多you can refer this!

例如:r'[0-9]{2}[.][0-9]{2}[.][0-9]{4}' or r'\d{2}\.\d{2}\.\d{4}'

text = 'CLAUDIU-MIHAI17.12.1999'
pattern = r'\d{2}\.\d{2}\.\d{4}'

if re.search(pattern, text):
    print("yes")

regex中的.(点)并不意味着字符点,它意味着“任何东西”,需要转义(\)才能成为实际的点。
除此之外,您的第一组是\d{2},但您的一些日期有个位数的日期。
我将使用以下方法:

re.search(r'(\d+\.\d+\.\d+)', row['Prenume'])

这意味着至少有一个数字后跟一个点后跟至少一个数字……
如果你在一天中有一些混合性格,你可以尝试以下(低于标准)的解决方案:

''.join(re.search(r'(\d*)(?:[^0-9\.]*)(\d*\.\d+\.\d+)', row['Prenume']).groups())

这会在你的“一天”中过滤掉最多一个块,虽然不漂亮,但它可以工作(并返回一个字符串)

相关问题 更多 >