r - 在 R 中使用正则表达式提取圆括号中的字符串

标签 r regex

在我的成绩单中,无声停顿用圆括号表示,例如,(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/

相关文章:

r - 按奇数或偶数秒对 POSIXct 时间进行子集

r - R 或 matlab 中的季节性箱线图

r - 在 RStudio 中按条件分组

r - 非零退出状态tidyverse安装软件包Rstudio

r - 如何为 slider (sliderInput)着色?

php - 正则表达式问号

json - golang 格式数据一次性转换为 JSON 格式

regex - Vim:将正则表达式匹配到+ clipboard

java - 如何以高效且更好的方式替换Java中的空格

javascript - 使用正则表达式在等号后显示文本?