r语言 - gsub提取字符串



我的示例数据是:

c("2tNO  PEMJNUMt 2tALTOGETHER HOW MANY JOBSt216 - 217", 
"1tREFERENCE PERSON 2tSPOUSE 3tCHILD 4tOTHER RELATIVE (PRIMARY FAMILY & UNREL) PRFAMTYPt2tFAMILY TYPE RECODEt155 - 156", 
"5tUNABLE TO WORK  PUBUS1t 2tLAST WEEK DID YOU DO ANYt184 - 185", 
"2tNO  PEIO1COWt 2tINDIVIDUAL CLASS OF WORKER CODEt432 - 433"

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

第一行:"第2行:"PRFAMTYP"第三行:pubus1;第4行:"PEIO1COW">

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

不确定是否有更好的方法来做到这一点!

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

x <- c("2tNO  PEMJNUMt 2tALTOGETHER HOW MANY JOBSt216 - 217", 
"1tREFERENCE PERSON 2tSPOUSE 3tCHILD 4tOTHER RELATIVE (PRIMARY FAMILY & UNREL) PRFAMTYPt2tFAMILY TYPE RECODEt155 - 156", 
"5tUNABLE TO WORK  PUBUS1t 2tLAST WEEK DID YOU DO ANYt184 - 185", 
"2tNO  PEIO1COWt 2tINDIVIDUAL CLASS OF WORKER CODEt432 - 433")
sub("^(?:.*\b)?(\w+)\s*\b2\b.*", "\1", x, perl=TRUE)
# => [1] "PEMJNUM"  "PRFAMTYP" "PUBUS1"   "PEIO1COW"

查看在线正则表达式演示和R演示。

细节:

  • ^-字符串
  • 起始
  • (?:.*b)?-一个可选的非捕获组,匹配任何零个或多个字符(除了换行字符,因为我使用perl=TRUE,如果你需要匹配换行符,也,在模式开始时添加(?s))尽可能多,然后一个字边界位置
  • (w+)-组1 (1):一个或多个字字符
  • s*-零或多个空白
  • b- a字边界
  • 2-2
  • b- a字边界
  • .*-剩下的行/字符串。

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

相关内容

  • 没有找到相关文章

最新更新