Используя регулярные выражения, как удалить дату, время в строке? - PullRequest
0 голосов
/ 28 февраля 2019

имеют 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

с использованием регулярного выражения, как удалить эти даты в строке с датами, имеющими разные форматы

вывод должен быть

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Соответствие Regex было бы очень нечитаемым и плохим решением.

В вашем случае до любой даты есть ключевое слово «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

Другое решение без Regex - удалить всепосле ключевого слова "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
0 голосов
/ 28 февраля 2019

Чтобы заменить дату пробелами, используйте это регулярное выражение on\s[\d\w-:\s]*. Вот демоверсия

0 голосов
/ 28 февраля 2019

, если ваша дата соответствует и следует за последним словом «вкл», вы можете попробовать код ниже для ее анализа:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...