|  |      1jin6220 OP for title in titles: print(title) 别人上传的代码怎么那么结构清晰啊 =,= | 
|  |      2zhjits      2017-01-14 23:09:20 +08:00 直接读 JSON 转成的 dict 不行么 | 
|  |      3decken      2017-01-14 23:11:52 +08:00 via iPhone 用 json.loads 反序列化出对象,再 get 一下就 ok 了 | 
|      4golmic      2017-01-14 23:12:00 +08:00 via Android url":"[^"]+ | 
|      6cdwyd      2017-01-14 23:12:13 +08:00 via Android re.compile('article/(\d+)/') | 
|  |      7fy      2017-01-14 23:13:38 +08:00 这需求不要用正则,本身例外多早晚出事。直接 json 解轻松愉快。 | 
|  |      9Yinz      2017-01-14 23:18:44 +08:00 如果不要求一定用正则的话, json 直接读成 dict 就好了,如 3 、 5 楼所说 j2=str(json.loads(j)) #必须转换成字符串才能正则匹配。 titles=re.findall(r"(?<='title_hide':).*?(?=,)",j2,re.M) print(len(titles)) for title in titles: print(title) urls=re.findall(r"'url':(.*?),.?'title'",j2,re.M) #这里不对,不知道如何弄出来了 print(len(urls),urls) 上面这几行改成 j2=json.loads(j) print(j2.get('title_hide')) print(j2.get('url')) 应该就没问题的了 | 
|  |      11jin6220 OP 当初没用字典是嫌麻烦,各种套嵌。看来明天还得再看看正则。 | 
|  |      13jin6220 OP @Yinz 嗯 你那个结构好像不对 但是换成 json 无非就是套嵌 dict 循环下就立马解出了 正则不如派森像是人类语言啊啊啊 但是还是很想弄懂正则怎么写 毕竟有时候只有正则解决问题很暴力 =,= | 
|      14lxy      2017-01-15 00:25:13 +08:00 要是有人在工作中有 json 不用非要用正则写一堆“乱码”会被我捏脸的。 4 楼那个就是了,不过漏了空格,稍微严谨一点的写法: "url"\s*:\s*"(.+?)"\s*, | 
|  |      15Allianzcortex      2017-01-15 00:42:13 +08:00 其实我想说的很多时候返回的 JSON 格式顺序是不固定的,调好了这一个正则,下次请求的时候内容就又变了。所以??? | 
|  |      17jin6220 OP @Yinz 里头的主体结构类似是: { "result": [{"title_hide": ...,,"url": ...},{title_hide:...,url:...},{title_hide:...,url:...},,{title_hide:...,url:...},其他字典]} result 的值是一个列表,列表里的字典都是并列结构,不循环可以? | 
|  |      19wyntergreg      2017-01-15 08:57:55 +08:00 不用 JSON 非要正则,舍近求远? | 
|  |      20allenhu      2017-01-15 09:12:48 +08:00 via Android 无知者无畏 | 
|  |      22jin6220 OP 正则前后关系匹配:"url"\s*:\s*"(.+?)"\,\s*"title     re.M 但是实际 url 的邻居可能会变. | 
|  |      23jin6220 OP 吃饭去了。。。 总结下 非正则的办法: 第一步: a=j2['result'] (这里 j2 就不用字符串话了) a 是一个列表,里面是 20 个并联关系的字典。 第二部: >>> for b in a : print(b.get('title_hide')) >>> for b in a : print(b.get('url')) 正则方法: 第一种 urls=re.findall(r"(?<='url':)\s*'http://www.guokr.com/article/\d{5,7}/'(?=,)",str(j2)) 第二种(看运气,前后邻居可能会变,然后就失效) urlsre=re.findall(r"'url'\s*:\s*'(.+?)',\s*'title'",str(j2),re.M) | 
|  |      24Valyrian      2017-01-15 09:56:11 +08:00 via iPad  1 这是理论上行不通的,因为 regex parse 的是 regular language , json isn't a regular language  http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags | 
|  |      26jin6220 OP @Valyrian  理论是不行,第一次也是发现不对,然后就把 json ( dict )数据 str 化了,最后是找到结果了。 | 
|  |      27sola97      2017-01-15 10:31:31 +08:00 via Android 这么简单还不用 dict...有写正则的功夫早就 get 完了 | 
|  |      28Merlini      2017-01-15 11:09:14 +08:00 via Android 而且正则也慢啊 | 
|      29zzn      2017-01-15 11:56:46 +08:00  1 解析 xml/json 不要用正则 解析 xml/json 不要用正则 解析 xml/json 不要用正则 | 
|  |      30zhidian      2017-01-15 12:00:07 +08:00 JSON 也有 xpath 类似的工具啊…… | 
|  |      32imlonghao      2017-01-15 12:34:34 +08:00 import requests a = requests.get('http://www.guokr.com/apis/minisite/article.json?retrieve_type=by_subject&subject_key=diy&limit=20&offset=18&_=1484373021355').json() result = [[x['title_hide'], x['url']] for x in a['result']] | 
|  |      33imlonghao      2017-01-15 12:35:48 +08:00 不!要!用!正!则!处!理 json 数!据! | 
|  |      35eoo      2017-01-15 23:14:55 +08:00 via Android PHP  json_decode($json);  搞定 啊哈哈 | 
|  |      36Ouyangan      2017-01-16 00:09:52 +08:00 正则处理 json 属于野路子.本身就是结构化的数据为什么用正则呢? | 
|      37xiamx      2017-01-16 01:35:48 +08:00 |