Мне нужна помощь с заменой символов в строке с помощью регулярных выражений.
Вход :
s3 = ['March/21/2019' , 'Mar/23/2019']
Желаемый результат:
s3 = ['03/21/2019' , '03/23/2019']
Я пробовал несколько вещей, но ни одна из них, похоже, не влияет на ввод:
s3[i] = s3[i].replace(r'Mar[a-z]*', '03')
s3[i] = s3[i].replace(r'(?:Mar[a-z]*)', '03')
Может кто-нибудь, пожалуйста, помогите мне и скажите, что я делаю неправильно.
replace
не использует регулярные выражения. Вам нужно re.sub(r'Mar[a-z]*', '03',s3[i])
Если вы хотите использовать регулярное выражение, вам нужно импортировать его через import re
и использовать вместо str.replace()
, которое не поддерживает шаблоны регулярных выражений. Если ваш список данных является частью кадра данных pandas, вы можете использовать df.str.replace()
, который, в свою очередь, их поддерживает.
Это работает.
import re
s3 = ['March/21/2019' , 'Mar/23/2019']
s3 = [re.sub(r'Mar[a-z]*', '03', item) for item in s3]
# ['03/21/2019', '03/23/2019']
Конечно, вы также можете использовать цикл for для лучшей читабельности.
import re
s3 = ['March/21/2019' , 'Mar/23/2019']
for i in range(len(s3)):
s3[i] = re.sub(r'Mar[a-z]*', '03', s3[i])
# ['03/21/2019', '03/23/2019']
Если вы работаете только с датами, попробуйте что-то вроде этого:
import datetime
s3 = ['March/21/2019' , 'Mar/23/2019']
for i in range(0, len(s3)):
try:
newformat = datetime.datetime.strptime(s3[i], '%B/%d/%Y')
except ValueError:
newformat = datetime.datetime.strptime(s3[i], '%b/%d/%Y')
s3[i] = newformat.strftime('%m/%d/%Y')
s3
теперь содержит ['03/21/2019', '03/23/2019']
Если вы работаете только с датами, я думаю, вам лучше использовать
datetime
: stackoverflow.com/questions/2265357/…