我有:`
String="(anthony,2019, p.485)"
所需的输出:
String="(anthony,2019)"
我只想删除p.485。
我使用正则表达式:`
gsub("\\( \\,p\\.[0-9]\\)","",String)
但是它不起作用。
谢谢!
答案 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