【发布时间】:2014-09-11 10:08:15
【问题描述】:
我有一个大的 CSV 文件,其中一行如下所示:
id_85,
{
"link": "some link",
"icon": "hello.gif",
"name": "Wall Photos",
"comments": {
"count": 0
},
"updated_time": "2012-03-12",
"object_id": "400",
"is_published": true,
"properties": [
{
"text": "University",
"name": "By",
"href": "some link"
}
],
"from": {
"id": "7778",
"name": "Let"
},
"message": "Hello World! :D",
"id": "id_85",
"created_time": "2012-03-12",
"to": {
"data": [
{
"id": "100",
"name": "March"
}
]
},
"message_tags": {
"0": [
{
"id": "100",
"type": "user",
"name": "Marcelo",
"length": 7,
"offset": 0
}
]
},
"type": "photo",
"caption": "Hello world!"
}
我试图在第一个和结尾的大括号之间获取它的 json 部分。
下面是我目前的python正则表达式代码
import re
str = "id_85,{"link": "some link", "icon": "hello.gif", "name": "Wall Photos", "comments": {"count": 0}, "updated_time": "2012-03-12", "object_id": "400", "is_published": true, "properties": [{"text": "University", "name": "By", "href": "some link"}], "from": {"id": "777", "name": "Let"}, "message": "Hello World! :D", "id": "id_85", "created_time": "2012-03-12", "to": {"data": [{"id": "100", "name": "March"}]}, "message_tags": {"0": [{"id": "100", "type": "user", "name": "March", "length": 7, "offset": 0}]}, "type": "photo", "caption": "Hello world!"} "
m = re.match(r'.*,({.*}$)', str)
if m:
print m.group(1)
在某些情况下,它不使用第一个和最后一个大括号,例如 { ... } 。如何确保只包含第一个和最后一个大括号之间的文本而不包含其他任何内容?
所需的输出如下所示:
{"link": "some link", "icon": "hello.gif", "name": "Wall Photos", “cmets”:{“count”:0},“updated_time”:“2012-03-12”,“object_id”: "400", "is_published": true, "properties": [{"text": "University", “名称”:“作者”,“href”:“某些链接”}],“来自”:{“id”:“777”,“名称”: “让”},“消息”:“Hello World!:D”,“id”:“id_85”,“created_time”: "2012-03-12", "to": {"data": [{"id": "100", "name": "March"}]}, “message_tags”:{“0”:[{“id”:“100”,“类型”:“用户”,“名称”:“三月”, “长度”:7,“偏移”:0}]},“类型”:“照片”,“标题”:“你好 世界!”}
谢谢!
【问题讨论】:
-
那些不是括号。
-
所以您想要从第一个
{到最后一个}的所有内容?其中第一个{是前面没有任何其他{的那个,最后一个}是后面没有任何其他}的那个;对吗? -
@Scott Hunter:是的,你是对的!
-
您的 CSV 是否有多个 JSON 类型的条目?
-
是的,确实如此。我的 CSV 文件中的 JSON 条目并非都属于同一类型。
标签: python regex curly-brackets