使用R中的正则表达式提取圆括号中的字符串
在我的成绩单中,无声停顿用圆括号表示,例如,(0.9)但也用(.)表示<0.3秒的停顿。我想提取这些暂停。然而,抄写者的评论也用同样的方式表示,即用双圆括号括起来,例如((咳嗽))。例如使用R中的正则表达式提取圆括号中的字符串,r,regex,R,Regex,在我的成绩单中,无声停顿用圆括号表示,例如,(0.9)但也用(.)表示
yy <- c("well [yes right] (.)", "let's go ((giggles))", "oh [ we::ll] i do n't (0.5) know", "erm [°well right° ]", "(3.2)")
yy我们可以使用str_extract
提取模式,该模式表示一个可选数字后跟一个小数,然后后跟另一个可选数字值。我们在这里使用可选(“?”)来获取空值“(.)”
或者将相同的正则表达式与base Rregmatches
一起使用,可以保存删除NA
值的步骤
regmatches(yy, regexpr("(\\((\\d+)?(\\.(\\d)?\\)))", yy))
#[1] "(.)" "(0.5)" "(3.2)"
另一个带有gsub
的选项:
gsub("[^(]*(\\(([.0-9]+)\\)|\\b|\\B)[^)]*", "\\2", yy)
#[1] "." "" "0.5" "" "3.2"
模式说明:
. <代码>[^(]*
:除开括号外的任何内容,0次或更多次.
(\\([0-9]+)\\\\\\b \\\\b)
:我们要捕获的内容:一个开括号后跟一个点或多个数字,一次或多次,后跟一个闭括号(我们只想捕获点或数字部分,因此在替换部分捕获\\2
)或可以位于单词边缘的空字符串(\\b
)(\\B
).N.B:这里我们不保留暂停时间的括号,但我们可以。.
[^)]*
:除右括号外的任何内容,0次或多次库(stringr);str\u extract\u all(yy,“\\(\\d+。\\d+\)\)\(\.\\)”
library(stringr)
vec <- str_extract(yy, "(\\((\\d+)?(\\.(\\d)?\\)))")
vec
#[1] "(.)" NA "(0.5)" NA "(3.2)"
vec[!is.na(vec)]
#[1] "(.)" "(0.5)" "(3.2)"
regmatches(yy, regexpr("(\\((\\d+)?(\\.(\\d)?\\)))", yy))
#[1] "(.)" "(0.5)" "(3.2)"
gsub("[^(]*(\\(([.0-9]+)\\)|\\b|\\B)[^)]*", "\\2", yy)
#[1] "." "" "0.5" "" "3.2"