Как разбить строку на Python, чтобы брать только средние символы? - PullRequest
1 голос
/ 14 июля 2020

У меня есть строка

['tick_calculated_2_2020-05-27T11-59-06.json.gz']

Я хочу получить только 59-06

>>> f.split('_')
['tick', 'calculated', '2', '2020-05-27T11-59-06.json.gz']
>>> f.split('_')[3]
'2020-05-27T11-59-06.json.gz'

>>> f.split('_')[3].split('.')[0]
'2020-05-27T11-59-06'

Каким должен быть следующий шаг?

Ответы [ 5 ]

2 голосов
/ 14 июля 2020

Вы идете в правильном направлении. В отличие от других ответов, я считаю, что регулярное выражение - это немного излишне, помимо того, что оно медленнее и сложнее для понимания и поддержки.

Как только у вас есть строка x = '2020-05-27T11-59-06', вы можете сделать x.split('-'), чтобы получить список lst = ['2020', '05', '27T11', '59', '06']. Затем вы можете получить доступ к последним 2 элементам этого списка, чтобы легко получить желаемое: lst[-1], lst[-2].

1 голос
/ 14 июля 2020

Предполагая, что вы не знаете об использовании регулярных выражений, попробуйте Google python разрезать строку. У вас была правильная идея разделить его на "_", а затем продолжить его на "." затем нарежьте полученную таким образом строку на последние 5 символов

f = 'tick_calculated_2_2020-05-27T11-59-06.json.gz'
splitted = f.split('_')
print(splitted)

date = splitted[3].split('.')[0]
specialNum = date[-5:]
print(specialNum)
1 голос
/ 14 июля 2020

Вы можете попробовать использовать re (регулярное выражение).

import re

f = "tick_calculated_2_2020-05-27T11-59-06.json.gz"

res = re.search(r"T\d+\-([\d\-]+)\.json\.gz", f)

print(res.groups()[0])

вывод: 59-06

0 голосов
/ 14 июля 2020

Это использует Позитивный просмотр вперед и Позитивный просмотр назад, чтобы утверждать, что совпадение происходит точно.

import re

string = 'tick_calculated_2_2020-05-27T11-59-06.json.gz'

re.search(r'(?<=T\d{2}-)\d{2}-\d{2}(?=\.json)', string).group()

Вывод:

59-06
0 голосов
/ 14 июля 2020

Вы можете использовать str.rfind следующим образом:

index = s.rfind('-')
s[index - 2:index + 3]

Или использовать регулярное выражение следующим образом:

import re
re.search(r'.{5}(?=\.json)', s).group()
...