我有:`
String="(anthony,2019, p.485)"
期望的输出:
String="(anthony,2019)"
我只想删除 p.485。
我使用正则表达式:`
gsub("\\( \\,p\\.[0-9]\\)","",String)
但它不起作用。
谢谢!
我们可以使用subto match,后跟一个空格、'p' 和一个或多个数字 ( \\d+),在替换中用空格 ( "") 替换
sub(", p\\.\\d+", "", String)
#[1] "(anthony,2019)"
我们也可以试试这个效率稍低的正则表达式:
String="(anthony,2019, p.485)"
gsub(",\\s\\w.\\d{1,}","",String,perl=TRUE)
#[1] "(anthony,2019)"
这似乎有点脆弱,因为它取决于逗号后除了最后一个空格之外没有任何空格:
gsub("[,] [^,)]+","", String)
[1] "(anthony,2019)"
这种脆弱性也困扰着阿克伦的回答。一个更强大的解决方案是匹配最后一个逗号,但保留在结束括号中。此解决方案将找到最后一个逗号并删除所有内容,但不包括结束括号:
gsub("(.+)([,] [^,]+)([)])","\\1\\3", String) # 3 capture classes
[1] "(anthony,2019)" # return only first and third