无法从末尾匹配字符串

时间:2019-10-24 05:36:07

标签: python regex

我想从以下字符串中获取最后一个嵌套列表

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 个答案:

答案 0 :(得分:2)

您的输入不以]]结尾,因此放置锚点$在您的正则表达式中无效。

您可以使用此正则表达式从输入中获取最后一对[[...]]

>>> 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 Demo

RegEx详细信息:

  • .*:开始时贪婪匹配,以匹配最长的字符串
  • (\[\[.*?\]\]):在[[...]]之间匹配和捕获文本。

答案 1 :(得分:1)

您搜索的文本不以']}'结尾。 它实际上以“&def&|”结尾 所以用

text = re.findall('(\[\[.*?\]\])&def   &|$', data)

答案 2 :(得分:0)

不使用regex

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

或者,

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

但这完全是特定情况的。