有价值的df
0 | 1
Thanks $.728.98 in nyc on 2018-04-22:11:09:35 | 7812
Rs.999.98 in shop 1872 mumbai on 2018-04-22 | 8574
INR.999.98 in shop 1872 mumbai on 2018-04 | 79821
Thanks $.4728.98 in nyc on 2018-04-22 sat 11:09:35 | 7818
使用正则表达式如何在具有不同格式的日期的字符串中删除这些日期
输出应该是
正则表达式匹配将是一个非常难以理解和糟糕的解决方案。
在你的情况下,在任何日期之前都有一个可以使用的“on”关键字,所以只要日期表达式中没有空格(添加它们就可以删除日期之后的任何字符),它可以在这里运行,但可能会替换其他表达如on 1234
或on !@$#
:
df[0].str.replace('on\s+[\W\d]+', '')
所以输出是:
0 1
0 Thanks $.728.98 in nyc 1
1 7812
2 Rs.999.98 in shop 1872 mumbai 8574
3 INR.999.98 in shop 1872 mumbai 79821
4 Thanks $.4728.98 in nyc sat 11:09:35 7818
没有正则表达式的其他解决方案是在“on”关键字后删除所有内容:
df[0] = df[0].apply(lambda x: x.split("on")[0])
结果如下:
0 1
0 Thanks $.728.98 in nyc 1
1 7812
2 Rs.999.98 in shop 1872 mumbai 8574
3 INR.999.98 in shop 1872 mumbai 79821
4 Thanks $.4728.98 in nyc 7818
如果你的日期是一致的并且在最后一个“on”字之后出现,你可以尝试下面的代码来解析它:
import re
from datetime import datetime
from dateutil.parser import parse
import unittest
def parse_custom_string(mystr):
return mystr.split(mystr.split(sep="on")[-1])[0][:-3]
def parse_date_custom_string(mystr):
return parse(timestr=(mystr.split(mystr.split(sep="on")[-2])[1]), dayfirst=False,fuzzy_with_tokens=True)[0]
assert (parse_custom_string('Thanks $.728.98 in nyc on 2018-04-22:11:09:35') == "Thanks $.728.98 in nyc" )
assert (type(parse_date_custom_string('Thanks $.728.98 in nyc on 2018-04-22:11:09:35')) == datetime)
assert (parse_custom_string('Rs.999.98 in shop 1872 mumbai on 2018-04-22') == "Rs.999.98 in shop 1872 mumbai" )
assert (type(parse_date_custom_string('Rs.999.98 in shop 1872 mumbai on 2018-04-22')) == datetime)
assert (parse_custom_string('INR.999.98 in shop 1872 mumbai on 2018-04') == "INR.999.98 in shop 1872 mumbai" )
assert (type(parse_date_custom_string('INR.999.98 in shop 1872 mumbai on 2018-04')) == datetime)
assert (parse_custom_string('Thanks $.4728.98 in nyc on 2018-04-22 sat 11:09:35') == "Thanks $.4728.98 in nyc" )
assert (type(parse_date_custom_string('Thanks $.4728.98 in nyc on 2018-04-22 sat 11:09:35')) == datetime)
要用空格替换日期,请使用此正则表达式on\s[\d\w-:\s]*
。 Here is the demo