如何用R去除支架内的“ p.485”?

时间:2019-02-28 19:00:07

标签: r regex

我有:`

String="(anthony,2019, p.485)"

所需的输出:

String="(anthony,2019)"

我只想删除p.485。

我使用正则表达式:`

gsub("\\( \\,p\\.[0-9]\\)","",String) 

但是它不起作用。

谢谢!

3 个答案:

答案 0 :(得分:2)

我们可以使用sub来匹配,,后跟一个空格,“ p”和一个或多个数字(\\d+),并用空格("")代替替换

sub(", p\\.\\d+", "", String)
#[1] "(anthony,2019)"

答案 1 :(得分:1)

我们也可以尝试使用效率稍低的正则表达式:

String="(anthony,2019, p.485)"
gsub(",\\s\\w.\\d{1,}","",String,perl=TRUE)
#[1] "(anthony,2019)"

答案 2 :(得分:0)

这似乎有点脆弱,因为它取决于逗号后除最后一个空格外是否有空格:

gsub("[,] [^,)]+","", String)
[1] "(anthony,2019)"

这种脆弱性也困扰着akrun的答案。一个更可靠的解决方案是在最后一个逗号处匹配,但保留在结束括号中。此解决方案将找到最后一个逗号,并删除所有内容,但不包括结尾括号:

gsub("(.+)([,] [^,]+)([)])","\\1\\3", String)  # 3 capture classes

[1] "(anthony,2019)"                           # return only first and third