gsub 提取字符串

gsub extracting string

我的示例数据是:

    c("2\tNO  PEMJNUM\t 2\tALTOGETHER HOW MANY JOBS\t216 - 217", 
"1\tREFERENCE PERSON 2\tSPOUSE 3\tCHILD 4\tOTHER RELATIVE (PRIMARY FAMILY & UNREL) PRFAMTYP\t2\tFAMILY TYPE RECODE\t155 - 156", 
"5\tUNABLE TO WORK  PUBUS1\t 2\tLAST WEEK DID YOU DO ANY\t184 - 185", 
"2\tNO  PEIO1COW\t 2\tINDIVIDUAL CLASS OF WORKER CODE\t432 - 433"

对于每一行,我要提取(它们是变量名):

第 1 行:“PEMJNUM” 第 2 行:“PRFAMTYP” 第 3 行:“PUBUS1” 第 4 行:“PEIO1COW”

我最初的目标是用 gsub 删除每个变量名左右的字符,只留下变量名,但我只能抓取变量名右侧的所有内容,抓取时遇到问题左边的字符。 (如此处所示https://regexr.com/67r6j)。

不确定是否有更好的方法!

您可以通过以下方式使用sub

x <- c("2\tNO  PEMJNUM\t 2\tALTOGETHER HOW MANY JOBS\t216 - 217", 
 "1\tREFERENCE PERSON 2\tSPOUSE 3\tCHILD 4\tOTHER RELATIVE (PRIMARY FAMILY & UNREL) PRFAMTYP\t2\tFAMILY TYPE RECODE\t155 - 156", 
 "5\tUNABLE TO WORK  PUBUS1\t 2\tLAST WEEK DID YOU DO ANY\t184 - 185", 
 "2\tNO  PEIO1COW\t 2\tINDIVIDUAL CLASS OF WORKER CODE\t432 - 433")
sub("^(?:.*\b)?(\w+)\s*\b2\b.*", "\1", x, perl=TRUE)
# => [1] "PEMJNUM"  "PRFAMTYP" "PUBUS1"   "PEIO1COW"

参见online regex demo and the R demo

详情:

  • ^ - 字符串开头
  • (?:.*\b)? - 一个可选的非捕获组,匹配任何零个或多个字符(除了换行字符,因为我使用 perl=TRUE,如果您也需要匹配换行符,请添加(?s) at the pattern start) as many as possible, 然后是单词边界位置
  • (\w+) - 第 1 组 (</code>):一个或多个单词字符 </li> <li><code>\s* - 零个或多个空格
  • \b - 单词边界
  • 2 - 2 数字
  • \b - 单词边界
  • .* - line/string.
  • 的其余部分

如果2之前总是有空格,正则表达式可以写成"^(?:.*\b)?(\w+)\s+2\b.*".