大家好,我是你们亲爱的老师/同行R用户。
最近我开始认真学习正则表达式,在学习过程中遇到了一个情况:我们只想保留成对的括号()
,而忽略那些不成对的。以下是我的样例数据:
structure(list(t1 = c("Book (Pg 1)", "(Website) Online)", "Journal: 2018)",
"Book1 (pg 2) book 3 (pg4) something)")), class = "data.frame", row.names = c(NA,
-4L))
我期望的输出结果如下:
structure(list(t1 = c("Book (Pg 1)", "(Website) Online", "Journal: 2018",
"Book1 (pg 2) book 3 (pg4) something")), class = "data.frame", row.names = c(NA,
-4L))
我自己用以下代码成功实现了,但我想肯定有更有效的方法。事实上,我想学习其他实现类似结果的方法:
test$t2 <- gsub("([(]?.*[)]?\\s+[^(]\\w+)[)]|([(].*[)])", "\\1\\2", test$t1)
test
t1 t2
1 Book (Pg 1) Book (Pg 1)
2 (Website) Online) (Website) Online
3 Journal: 2018) Journal: 2018
4 Book1 (pg 2) book 3 (pg4) something) Book1 (pg 2) book 3 (pg4) something
我的正则表达式出现问题,当我交换
|
操作符中RHS
和LHS
的位置时,无法得到期望的结果,这让我很好奇。我希望您能简要解释如何解决这些问题。非常感谢您的帮助。
(*SKIP)
和(*F)
是什么意思。如果您能向我解释一下,我将不胜感激。 - Anoushiravan R