在我的成绩单中,无声停顿用圆括号表示,例如,(0.9) 但也有 (.) 用于停顿 < 0.3 秒。我想提取这些停顿。然而,抄写员的评论以类似方式表示,即在双圆括号中,例如((咳嗽))。对于这个例子
yy <- c("well [yes right] (.)", "let's go ((giggles))", "oh [ we::ll] i do n't (0.5) know", "erm [°well right° ]", "(3.2)")
这会提取所有停顿以及转录员评论:
pattern <- "(\\(.*?\\))"
grep(pattern, yy, value=T)
matches <- gregexpr(pattern, yy)
paus <- regmatches(yy, matches)
paus <- unlist(paus)
paus
[1] "(.)" "((giggles)" "(0.5)" "(3.2)"
为了摆脱评论,我试过这个:
pattern <- "\\([^\\(].*?\\)[^\\)].*?"
找到“(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
)。 注意:这里我们没有保留暂停时间周围的括号,但我们可以。
. [^)]*
:除右括号外的任何内容,0 次或多次
关于r - 在 R 中使用正则表达式提取圆括号中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464824/