Невозможно сопоставить строку с конца - PullRequest
0 голосов
/ 24 октября 2019

Я хочу получить последний вложенный список из следующей строки

data = '|[[1385827200000,5955],[1388505600000,5955],[1391184000000,5955],[1393603200000,5955],[1438358400000,53192],[1441036800000,53946],[1443628800000,65779]]&abc   &|[[1541001600000,60891],[1543593600000,60910],[1546272000000,60964],[1548950400000,61005],[1551369600000,60864],[1554048000000,61309],[1556640000000,61092],[1559318400000,62556],[1561910400000,62379],[1564588800000,64356],[1567267200000,65979],[1569859200000,65979]]&def   &|'

text = re.findall('(\[\[.*\]\])$', data)

Но это дает None.

Какое правильное выражение?

Ответы [ 3 ]

2 голосов
/ 24 октября 2019

Ваш ввод не заканчивается ]], поэтому размещение якоря $ не будет работать в вашем регулярном выражении.

Вы можете использовать это регулярное выражение, чтобы получить последнюю пару [[...]] из ввода:

>>> text = re.findall(r'.*(\[\[.*?\]\])', data)[0]
>>> print (text)
'[[1541001600000,60891],[1543593600000,60910],[1546272000000,60964],[1548950400000,61005],[1551369600000,60864],[1554048000000,61309],[1556640000000,61092],[1559318400000,62556],[1561910400000,62379],[1564588800000,64356],[1567267200000,65979],[1569859200000,65979]]'

Демонстрация RegEx

Подробности RegEx:

  • .*: жадный матч в началесоответствует самой длинной возможной строке
  • (\[\[.*?\]\]): сопоставление и захват текста между [[...]].
1 голос
/ 24 октября 2019

Ваш текст не заканчивается на ']}', поскольку вы ищите его. На самом деле это заканчивается на «& def & |»Так что используйте

text = re.findall('(\[\[.*?\]\])&def   &|$', data)
0 голосов
/ 24 октября 2019

Без использования regex:

nested_list = eval(data.split('&|')[-2].split('&')[0])

Или

nested_list = eval(data.split('&')[-3].strip('|'))

Но это полностью зависит от конкретного случая.

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