找到字符在字符串中的位置,然后使用R

时间:2018-07-23 08:46:41

标签: r

我的数据如下:

[{'cast_id': 17, 'character': 'Albert Einstein', 'credit_id': '52fe43039251416c75000093', 'gender': 2, 'id': 61797, 'name': 'Yahoo Serious', 'order': 0, 'profile_path': '/pe2eKvE4PpdMhmNCIylDjoQhg2o.jpg'}, {'cast_id': 18, 'character': 'Marie Curie', 'credit_id': '52fe43039251416c75000097', 'gender': 0, 'id': 61808, 'name': 'Odile Le Clezio', 'order': 1, 'profile_path': None}, {'cast_id': 19, 'character': 'Mr. Einstein', 'credit_id': '52fe43039251416c7500009b', 'gender': 0, 'id': 61809, 'name': 'Peewee Wilson', 'order': 2, 'profile_path': None}, {'cast_id': 20, 'character': 'Mrs. Einstein', 'credit_id': '52fe43039251416c7500009f', 'gender': 0, 'id': 61810, 'name': 'Su Cruickshank', 'order': 3, 'profile_path': None}, {'cast_id': 21, 'character': 'Preston Preston', 'credit_id': '52fe43039251416c750000a3', 'gender': 2, 'id': 102603, 'name': 'John Howard', 'order': 4, 'profile_path': '/id5ucdglU6oPIibTzrLrtWBxTbw.jpg'}, {'cast_id': 22, 'character': "Darwin's Bodyguard", 'credit_id': '5525ab4692514172760024e2', 'gender': 2, 'id': 1451740, 'name': 'Christian Manon', 'order': 5, 'profile_path': '/800kuPsHOsFpCdHNaiV31xTQcQJ.jpg'}]

我需要提取第二次出现的字符'}'左侧的所有数据,并在末尾添加']'。 像这样的东西:

[{'cast_id': 17, 'character': 'Albert Einstein', 'credit_id': '52fe43039251416c75000093', 'gender': 2, 'id': 61797, 'name': 'Yahoo Serious', 'order': 0, 'profile_path': '/pe2eKvE4PpdMhmNCIylDjoQhg2o.jpg'}, {'cast_id': 18, 'character': 'Marie Curie', 'credit_id': '52fe43039251416c75000097', 'gender': 0, 'id': 61808, 'name': 'Odile Le Clezio', 'order': 1, 'profile_path': None}]

我尝试使用stringr包进行了一些选择,但是找不到任何可以使特定字符串的第n个位置出现的东西,然后将数据提取到其左侧,接下来。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用gregexpr查找模式的第n个出现位置:

txt <- "[{'cast_id': 17, 'character': 'Albert Einstein'} {'profile_path': None} {etc}]"
loc <- gregexpr("\\}", txt)[[1]][2] # 2 -> second occurence
paste0(substr(txt, 1, loc), "]") # add "]"

# "[{'cast_id': 17, 'character': 'Albert Einstein'} {'profile_path': None}]"

如果您有一个向量字符串,并且其中一些字符串可能少于2个“ {”,则可以使用

loc <- sapply(gregexpr("\\}", txt), '[', 2). 
ifelse(is.na(loc), txt, paste0(substr(txt, 1, loc), "]"))