我有一个字符串,我想使用gSub来获取每个人的姓名和国家代码,我想我接近于解决它,但方括号在字符串的末尾给我带来了问题.

 mstring = 'name1=\"Bloggs, Joe[[UK\" name2=\"Brian Williams, Joe[AA] [[USA\"'

我想要实现的是

mydat
name                  place
Bloggs, Joe           UK
Brian Williams, Joe   USA

我已经能够go 掉名字%1,但由于额外的方括号,我很难go 掉名字%2.对于名称%1,我使用了以下内容来获取名称,只是无法到达国家/地区和名称%2.我想如果我添加一个‘?’对于GSub的‘\[.*’部分,这将查找任何‘[’而不只是最后一个?

gsub(".*name1=\"([^\"]+) \\[.*", "\\1", mystring)

推荐答案

你的字符串格式有点烦人.看起来像是(乱码?)其他软件的键值对输出.以不同的格式导出它会更健壮.但是,如果这是不可能的,应该这样做:

mstring |>
  # Split rows from each other on \" 
  strsplit("\"\\s") |>
  # Split name from country on [[
  lapply(\(x) strsplit(x, "[[", fixed = TRUE) 
  ) |>
  unlist(recursive=FALSE) |>
  # Clean up the strings a little bit
  lapply(\(x) trimws(
    gsub("name\\d+=\"|\\[.+\\]|\"", "", x)
  )
  ) |>
  # Bind into a data frame and set names
  do.call(rbind.data.frame, args = _) |>
  setNames(c("name", "place"))
      
#                  name place
# 1         Bloggs, Joe    UK
# 2 Brian Williams, Joe   USA

R相关问答推荐

将一个载体的值相加,直到达到另一个载体的值

将Multilinetring合并到一个线串中,使用sf生成规则间隔的点

R箱形图gplot 2 4组但6个参数

然后根据不同的列值有条件地执行函数

在for循环中转换rabrame

R—将各种CSV数字列转换为日期

R中的哈密顿滤波

如何将SAS数据集的列名和列标签同时包含在r中GT表的表首?

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

根据约束随机填充向量的元素

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

手动指定从相同数据创建的叠加图的 colored颜色

以不同于绘图中元素的方式对GG图图例进行排序

SHILINY中DT列的条件着色

如何移动点以使它们的打印不重叠

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

以R表示的NaN值的IS.NA状态

具有由向量定义的可变步长的序列

在分面的ggplot2条形图中对条形图进行排序,并省略每组未使用的系数级别

打印的.txt文件,将值显示为&Quot;Num&Quot;而不是值