【发布时间】:2017-06-24 04:47:53
【问题描述】:
我已经尝试了很多东西,但我仍在寻找解决方案......
我有一些文字:
blah blah blah...\n计算尺考试不会引起 症状。\nImPACT 测试日期:...(在学校完成的基线)\n语言 记忆合成\n98\n98%\n视觉记忆合成\n81\n69%\n视觉 电机速度复合?38.83\n70%\n反应时间\n0.59\n56%\n脉冲 控制\n9\n症状总分\n3\nImPACT 测试日期:... (受伤后在学校完成)\n语言记忆复合\n54\n
我想获取此人的最后一个测试分数(根据文本中的顺序)。现在我正在获取第一个(根据文本中的顺序)测试分数。
此代码捕获第一个 Verbal Memory Composite 分数,在本例中为 98 和 98(百分比)。我想捕捉最后一个,在本例中为 54 和 1(百分比)。
我当前的代码:
re = ".*Verbal Memory Composite\n(\\S+?)\n(\\S+?)\n.*"
concussion.notes$IMPACT_VERBAL_MEM_NEW = as.numeric.score(with(concussion.notes, ifelse(grepl(re,NOTE_TEXT),sub(re,'\\1',NOTE_TEXT),'')))
concussion.notes$IMPACT_VERBAL_MEM_PCT_NEW = as.numeric.score(with(concussion.notes, ifelse(grepl(re,NOTE_TEXT),sub(re,'\\2',NOTE_TEXT),'')))
我尝试了 gsub 而不是 sub 等等,但仍然得到 98。
【问题讨论】:
-
尝试
[\s\S]*Verbal Memory Composite\n(\S+?)\n(\S+?)\n正确转义。 -
您不需要最后一个
.*,如果引号全部转义,您还需要转义\\n。如果他们不这样做并且只是限制字符,则分别将其设为\S和\n。另外,我会改用\r?\n。\